chardata.c revision 104349
1104349Sphk/* chardata.c 2104349Sphk * 3104349Sphk * 4104349Sphk */ 5104349Sphk 6104349Sphk#include <assert.h> 7104349Sphk#include <check.h> 8104349Sphk#include <stdio.h> 9104349Sphk#include <string.h> 10104349Sphk 11104349Sphk#include "chardata.h" 12104349Sphk 13104349Sphk 14104349Sphkstatic int 15104349Sphkxmlstrlen(const XML_Char *s) 16104349Sphk{ 17104349Sphk int len = 0; 18104349Sphk assert(s != NULL); 19104349Sphk while (s[len] != 0) 20104349Sphk ++len; 21104349Sphk return len; 22104349Sphk} 23104349Sphk 24104349Sphk 25104349Sphkvoid 26104349SphkCharData_Init(CharData *storage) 27104349Sphk{ 28104349Sphk assert(storage != NULL); 29104349Sphk storage->count = -1; 30104349Sphk} 31104349Sphk 32104349Sphkvoid 33104349SphkCharData_AppendString(CharData *storage, const char *s) 34104349Sphk{ 35104349Sphk int maxchars = sizeof(storage->data) / sizeof(storage->data[0]); 36104349Sphk int len; 37104349Sphk 38104349Sphk assert(s != NULL); 39104349Sphk len = strlen(s); 40104349Sphk if (storage->count < 0) 41104349Sphk storage->count = 0; 42104349Sphk if ((len + storage->count) > maxchars) { 43104349Sphk len = (maxchars - storage->count); 44104349Sphk } 45104349Sphk if (len + storage->count < sizeof(storage->data)) { 46104349Sphk memcpy(storage->data + storage->count, s, len); 47104349Sphk storage->count += len; 48104349Sphk } 49104349Sphk} 50104349Sphk 51104349Sphkvoid 52104349SphkCharData_AppendXMLChars(CharData *storage, const XML_Char *s, int len) 53104349Sphk{ 54104349Sphk int maxchars; 55104349Sphk 56104349Sphk assert(storage != NULL); 57104349Sphk assert(s != NULL); 58104349Sphk maxchars = sizeof(storage->data) / sizeof(storage->data[0]); 59104349Sphk if (storage->count < 0) 60104349Sphk storage->count = 0; 61104349Sphk if (len < 0) 62104349Sphk len = xmlstrlen(s); 63104349Sphk if ((len + storage->count) > maxchars) { 64104349Sphk len = (maxchars - storage->count); 65104349Sphk } 66104349Sphk if (len + storage->count < sizeof(storage->data)) { 67104349Sphk memcpy(storage->data + storage->count, s, 68104349Sphk len * sizeof(storage->data[0])); 69104349Sphk storage->count += len; 70104349Sphk } 71104349Sphk} 72104349Sphk 73104349Sphkint 74104349SphkCharData_CheckString(CharData *storage, const char *expected) 75104349Sphk{ 76104349Sphk char buffer[1280]; 77104349Sphk int len; 78104349Sphk int count; 79104349Sphk 80104349Sphk assert(storage != NULL); 81104349Sphk assert(expected != NULL); 82104349Sphk count = (storage->count < 0) ? 0 : storage->count; 83104349Sphk len = strlen(expected); 84104349Sphk if (len != count) { 85104349Sphk if (sizeof(XML_Char) == 1) 86104349Sphk sprintf(buffer, "wrong number of data characters:" 87104349Sphk " got %d, expected %d:\n%s", count, len, storage->data); 88104349Sphk else 89104349Sphk sprintf(buffer, 90104349Sphk "wrong number of data characters: got %d, expected %d", 91104349Sphk count, len); 92104349Sphk fail(buffer); 93104349Sphk return 0; 94104349Sphk } 95104349Sphk if (memcmp(expected, storage->data, len) != 0) { 96104349Sphk fail("got bad data bytes"); 97104349Sphk return 0; 98104349Sphk } 99104349Sphk return 1; 100104349Sphk} 101104349Sphk 102104349Sphkint 103104349SphkCharData_CheckXMLChars(CharData *storage, const XML_Char *expected) 104104349Sphk{ 105104349Sphk char buffer[1024]; 106104349Sphk int len = xmlstrlen(expected); 107104349Sphk int count; 108104349Sphk 109104349Sphk assert(storage != NULL); 110104349Sphk count = (storage->count < 0) ? 0 : storage->count; 111104349Sphk if (len != count) { 112104349Sphk sprintf(buffer, "wrong number of data characters: got %d, expected %d", 113104349Sphk count, len); 114104349Sphk fail(buffer); 115104349Sphk return 0; 116104349Sphk } 117104349Sphk if (memcmp(expected, storage->data, len * sizeof(storage->data[0])) != 0) { 118104349Sphk fail("got bad data bytes"); 119104349Sphk return 0; 120104349Sphk } 121104349Sphk return 1; 122104349Sphk} 123