aboutsummaryrefslogtreecommitdiff
path: root/expat/tests/chardata.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-10-18 13:29:37 +0200
committermarha <marha@users.sourceforge.net>2013-10-18 13:29:37 +0200
commit72483d25d0f41d48a8e6bdc83ab57c971cfb47b4 (patch)
treec8aa56f1e7dc24ce93287592c07a5f354eb6f86d /expat/tests/chardata.c
parentb821fe861f33d7e8a39fe4c7d885b7ff379dc476 (diff)
parent5880b059e9a156336daf32a73bed72def6ba90f2 (diff)
downloadvcxsrv-72483d25d0f41d48a8e6bdc83ab57c971cfb47b4.tar.gz
vcxsrv-72483d25d0f41d48a8e6bdc83ab57c971cfb47b4.tar.bz2
vcxsrv-72483d25d0f41d48a8e6bdc83ab57c971cfb47b4.zip
Merge remote-tracking branch 'origin/released'
* origin/released: Added expat-2.1.0
Diffstat (limited to 'expat/tests/chardata.c')
-rw-r--r--expat/tests/chardata.c131
1 files changed, 131 insertions, 0 deletions
diff --git a/expat/tests/chardata.c b/expat/tests/chardata.c
new file mode 100644
index 000000000..5fb0299d8
--- /dev/null
+++ b/expat/tests/chardata.c
@@ -0,0 +1,131 @@
+/* Copyright (c) 1998-2003 Thai Open Source Software Center Ltd
+ See the file COPYING for copying permission.
+
+ chardata.c
+*/
+
+#ifdef HAVE_EXPAT_CONFIG_H
+#include <expat_config.h>
+#endif
+#ifdef HAVE_CHECK_H
+#include <check.h>
+#else
+#include "minicheck.h"
+#endif
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "chardata.h"
+
+
+static int
+xmlstrlen(const XML_Char *s)
+{
+ int len = 0;
+ assert(s != NULL);
+ while (s[len] != 0)
+ ++len;
+ return len;
+}
+
+
+void
+CharData_Init(CharData *storage)
+{
+ assert(storage != NULL);
+ storage->count = -1;
+}
+
+void
+CharData_AppendString(CharData *storage, const char *s)
+{
+ int maxchars = sizeof(storage->data) / sizeof(storage->data[0]);
+ int len;
+
+ assert(s != NULL);
+ len = strlen(s);
+ if (storage->count < 0)
+ storage->count = 0;
+ if ((len + storage->count) > maxchars) {
+ len = (maxchars - storage->count);
+ }
+ if (len + storage->count < sizeof(storage->data)) {
+ memcpy(storage->data + storage->count, s, len);
+ storage->count += len;
+ }
+}
+
+void
+CharData_AppendXMLChars(CharData *storage, const XML_Char *s, int len)
+{
+ int maxchars;
+
+ assert(storage != NULL);
+ assert(s != NULL);
+ maxchars = sizeof(storage->data) / sizeof(storage->data[0]);
+ if (storage->count < 0)
+ storage->count = 0;
+ if (len < 0)
+ len = xmlstrlen(s);
+ if ((len + storage->count) > maxchars) {
+ len = (maxchars - storage->count);
+ }
+ if (len + storage->count < sizeof(storage->data)) {
+ memcpy(storage->data + storage->count, s,
+ len * sizeof(storage->data[0]));
+ storage->count += len;
+ }
+}
+
+int
+CharData_CheckString(CharData *storage, const char *expected)
+{
+ char buffer[1280];
+ int len;
+ int count;
+
+ assert(storage != NULL);
+ assert(expected != NULL);
+ count = (storage->count < 0) ? 0 : storage->count;
+ len = strlen(expected);
+ if (len != count) {
+ if (sizeof(XML_Char) == 1)
+ sprintf(buffer, "wrong number of data characters:"
+ " got %d, expected %d:\n%s", count, len, storage->data);
+ else
+ sprintf(buffer,
+ "wrong number of data characters: got %d, expected %d",
+ count, len);
+ fail(buffer);
+ return 0;
+ }
+ if (memcmp(expected, storage->data, len) != 0) {
+ fail("got bad data bytes");
+ return 0;
+ }
+ return 1;
+}
+
+int
+CharData_CheckXMLChars(CharData *storage, const XML_Char *expected)
+{
+ char buffer[1024];
+ int len = xmlstrlen(expected);
+ int count;
+
+ assert(storage != NULL);
+ count = (storage->count < 0) ? 0 : storage->count;
+ if (len != count) {
+ sprintf(buffer, "wrong number of data characters: got %d, expected %d",
+ count, len);
+ fail(buffer);
+ return 0;
+ }
+ if (memcmp(expected, storage->data, len * sizeof(storage->data[0])) != 0) {
+ fail("got bad data bytes");
+ return 0;
+ }
+ return 1;
+}