Annotation of embedaddon/expat/tests/chardata.c, revision 1.1

1.1     ! misho       1: /* Copyright (c) 1998-2003 Thai Open Source Software Center Ltd
        !             2:    See the file COPYING for copying permission.
        !             3: 
        !             4:    chardata.c
        !             5: */
        !             6: 
        !             7: #ifdef HAVE_EXPAT_CONFIG_H
        !             8: #include <expat_config.h>
        !             9: #endif
        !            10: #ifdef HAVE_CHECK_H
        !            11: #include <check.h>
        !            12: #else
        !            13: #include "minicheck.h"
        !            14: #endif
        !            15: 
        !            16: #include <assert.h>
        !            17: #include <stdio.h>
        !            18: #include <string.h>
        !            19: 
        !            20: #include "chardata.h"
        !            21: 
        !            22: 
        !            23: static int
        !            24: xmlstrlen(const XML_Char *s)
        !            25: {
        !            26:     int len = 0;
        !            27:     assert(s != NULL);
        !            28:     while (s[len] != 0)
        !            29:         ++len;
        !            30:     return len;
        !            31: }
        !            32: 
        !            33: 
        !            34: void
        !            35: CharData_Init(CharData *storage)
        !            36: {
        !            37:     assert(storage != NULL);
        !            38:     storage->count = -1;
        !            39: }
        !            40: 
        !            41: void
        !            42: CharData_AppendString(CharData *storage, const char *s)
        !            43: {
        !            44:     int maxchars = sizeof(storage->data) / sizeof(storage->data[0]);
        !            45:     int len;
        !            46: 
        !            47:     assert(s != NULL);
        !            48:     len = strlen(s);
        !            49:     if (storage->count < 0)
        !            50:         storage->count = 0;
        !            51:     if ((len + storage->count) > maxchars) {
        !            52:         len = (maxchars - storage->count);
        !            53:     }
        !            54:     if (len + storage->count < sizeof(storage->data)) {
        !            55:         memcpy(storage->data + storage->count, s, len);
        !            56:         storage->count += len;
        !            57:     }
        !            58: }
        !            59: 
        !            60: void
        !            61: CharData_AppendXMLChars(CharData *storage, const XML_Char *s, int len)
        !            62: {
        !            63:     int maxchars;
        !            64: 
        !            65:     assert(storage != NULL);
        !            66:     assert(s != NULL);
        !            67:     maxchars = sizeof(storage->data) / sizeof(storage->data[0]);
        !            68:     if (storage->count < 0)
        !            69:         storage->count = 0;
        !            70:     if (len < 0)
        !            71:         len = xmlstrlen(s);
        !            72:     if ((len + storage->count) > maxchars) {
        !            73:         len = (maxchars - storage->count);
        !            74:     }
        !            75:     if (len + storage->count < sizeof(storage->data)) {
        !            76:         memcpy(storage->data + storage->count, s,
        !            77:                len * sizeof(storage->data[0]));
        !            78:         storage->count += len;
        !            79:     }
        !            80: }
        !            81: 
        !            82: int
        !            83: CharData_CheckString(CharData *storage, const char *expected)
        !            84: {
        !            85:     char buffer[1280];
        !            86:     int len;
        !            87:     int count;
        !            88: 
        !            89:     assert(storage != NULL);
        !            90:     assert(expected != NULL);
        !            91:     count = (storage->count < 0) ? 0 : storage->count;
        !            92:     len = strlen(expected);
        !            93:     if (len != count) {
        !            94:         if (sizeof(XML_Char) == 1)
        !            95:             sprintf(buffer, "wrong number of data characters:"
        !            96:                     " got %d, expected %d:\n%s", count, len, storage->data);
        !            97:         else
        !            98:             sprintf(buffer,
        !            99:                     "wrong number of data characters: got %d, expected %d",
        !           100:                     count, len);
        !           101:         fail(buffer);
        !           102:         return 0;
        !           103:     }
        !           104:     if (memcmp(expected, storage->data, len) != 0) {
        !           105:         fail("got bad data bytes");
        !           106:         return 0;
        !           107:     }
        !           108:     return 1;
        !           109: }
        !           110: 
        !           111: int
        !           112: CharData_CheckXMLChars(CharData *storage, const XML_Char *expected)
        !           113: {
        !           114:     char buffer[1024];
        !           115:     int len = xmlstrlen(expected);
        !           116:     int count;
        !           117: 
        !           118:     assert(storage != NULL);
        !           119:     count = (storage->count < 0) ? 0 : storage->count;
        !           120:     if (len != count) {
        !           121:         sprintf(buffer, "wrong number of data characters: got %d, expected %d",
        !           122:                 count, len);
        !           123:         fail(buffer);
        !           124:         return 0;
        !           125:     }
        !           126:     if (memcmp(expected, storage->data, len * sizeof(storage->data[0])) != 0) {
        !           127:         fail("got bad data bytes");
        !           128:         return 0;
        !           129:     }
        !           130:     return 1;
        !           131: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>