1
/* long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing long line for testing */
3
* this program is released in the Public Domain
16
#include <libHX/defs.h>
17
#include <libHX/init.h>
18
#include <libHX/misc.h>
19
#include <libHX/string.h>
22
static void t_mc(void)
26
s = HXmc_meminit(NULL, 4096);
27
printf("%zu\n", HXmc_length(s));
28
if (HXmc_length(s) != 0)
33
fprintf(stderr, "INFO: HXmc: no reallocation took place.\n");
34
printf("Length is now %Zu\n", HXmc_length(s));
35
HXmc_setlen(&s, 16384);
36
printf("Length is now %Zu\n", HXmc_length(s));
40
static void t_path(void)
42
static const char *const paths[] = {
43
".", "..", "/", "//", "/.", "/./", "/./.",
44
"/mnt", "//mnt", "/mnt/", "//mnt/", "//mnt//", "//mnt//root",
45
"/mnt/.", "/mnt/./", "mnt", "mnt/", "mnt/root", "mnt/root/",
48
const char *const *iter;
51
printf("# dirname\n");
52
for (iter = paths; *iter != NULL; ++iter) {
53
item = HX_dirname(*iter);
54
printf("\t%s -> %s\n", *iter, item);
58
printf("# basename_exact\n");
59
for (iter = paths; *iter != NULL; ++iter) {
60
item = HX_basename_exact(*iter);
61
printf("\t%s -> %s\n", *iter, item);
65
printf("# basename_fast\n");
66
for (iter = paths; *iter != NULL; ++iter)
67
printf("\t%s -> %s\n", *iter, HX_basename(*iter));
70
static void t_strcpy(void)
74
HXmc_strcpy(&vp, NULL);
79
static void t_strncat(void)
81
char data[5] = "DATA";
83
if (snprintf(data, sizeof(data), "12345678") >=
84
static_cast(ssize_t, sizeof(data)))
85
printf("Not enough space\n");
86
printf("String: >%s<\n", data);
88
HX_strlcat(data, "pqrstuv__", 2);
89
printf("String: >%s<\n", data);
92
HX_strlcat(data, "123456789", sizeof(data));
93
printf("String: >%s<\n", data);
96
HX_strlncat(data, "123456789", sizeof(data), 9);
97
printf("String: >%s<\n", data);
100
static void t_strsep(void)
102
char b[] = "jengelh:x:1500:100:Jan Engelhardt:/home/jengelh:/bin/bash";
105
printf("# strsep\n");
106
while ((ret = HX_strsep2(&wp, ":")) != NULL)
110
static void t_split(void)
112
char t1[] = "root:x:0:0:root:/root:/bin/bash";
115
char **a0, **a1, *a2[10];
118
memcpy(t2, t1, sizeof(t1));
119
a0 = HX_split(t1, ":", &f0, 0);
120
a1 = HX_split4(t1, ":", &f1, 0);
121
f2 = HX_split5(t2, ":", ARRAY_SIZE(a2), a2);
123
/* complete allocation */
124
printf("HX_split1: a0[%p]:", a0);
125
for (wp = a0; *wp != NULL; ++wp)
126
printf(" %s[%p]", *wp, *wp);
129
/* array allocated */
130
printf("HX_split4: a1[%p]:", a1);
131
for (wp = a1; *wp != NULL; ++wp)
132
printf(" %s[%p]", *wp, *wp);
135
/* nothing allocated */
136
printf("HX_split5: a2[%p]:", a2);
137
for (wp = a2; f2 > 0; --f2, ++wp)
138
printf(" %s[%p]", *wp, *wp);
145
static void t_split2(void)
147
static const char tmp[] = "";
151
a = HX_split(tmp, " ", &c, 6);
152
printf("Got %d fields\n", c);
156
static void t_quote(void)
159
printf("%p %p\n", "a", HX_strquote("a", 0xffff, &fm));
160
printf("%s\n", HX_strquote("\"Good\" ol' \\'escaped\\' strings", HXQUOTE_SQUOTE, &fm));
161
printf("%s\n", HX_strquote("\"Good\" ol' \\'escaped\\' strings", HXQUOTE_DQUOTE, &fm));
162
printf("%s\n", HX_strquote("<p style=\"height: 1;\">Foo & \"bar\"</p>", HXQUOTE_HTML, &fm));
163
printf("(objectClass=%s)\n", HX_strquote(" #o=foo(*),bar ", HXQUOTE_LDAPFLT, &fm));
164
printf("o=%s\n", HX_strquote(" #o=foo(*),bar ", HXQUOTE_LDAPRDN, &fm));
165
printf("%s\n", HX_strquote("whatever", HXQUOTE_BASE64, &fm));
167
if (HX_strquote("", -1, NULL) != NULL)
168
printf("Something is fishy with strquote\n");
171
int main(int argc, const char **argv)
174
const char *file = (argc >= 2) ? argv[1] : "tx-string.cpp";
180
fp = fopen(file, "r");
182
fprintf(stderr, "Cannot open %s: %s\n", file, strerror(errno));
184
while (HX_getl(&tx, fp) != NULL)