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