home *** CD-ROM | disk | FTP | other *** search
/ Netrunner 2004 October / NETRUNNER0410.ISO / regular / ActivePerl-5.8.4.810-MSWin32-x86.msi / _f17f1d45244c1b6bcaed296ad770aba6 < prev    next >
Encoding:
Text File  |  2004-06-01  |  2.9 KB  |  123 lines

  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.  
  14. static int
  15. xmlstrlen(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.  
  25. void
  26. CharData_Init(CharData *storage)
  27. {
  28.     assert(storage != NULL);
  29.     storage->count = -1;
  30. }
  31.  
  32. void
  33. CharData_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.  
  51. void
  52. CharData_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.  
  73. int
  74. CharData_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.  
  102. int
  103. CharData_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. }
  123.