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>