~ubuntu-branches/ubuntu/trusty/libhx/trusty-proposed

« back to all changes in this revision

Viewing changes to src/tx-string.cpp

  • Committer: Package Import Robot
  • Author(s): Bastian Kleineidam
  • Date: 2011-12-18 08:40:39 UTC
  • mfrom: (13.1.10 sid)
  • Revision ID: package-import@ubuntu.com-20111218084039-0u1m6w6jz4voguzn
Tags: 3.12.1-1
* New upstream version.
* Rename package for new ABI version 28.
* Updated copyright year in debian/copyright.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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 */
2
 
/*
3
 
 *      this program is released in the Public Domain
4
 
 */
5
 
#ifndef __cplusplus
6
 
#       include <errno.h>
7
 
#       include <stddef.h>
8
 
#       include <stdio.h>
9
 
#       include <stdlib.h>
10
 
#else
11
 
#       include <cerrno>
12
 
#       include <cstddef>
13
 
#       include <cstdio>
14
 
#       include <cstdlib>
15
 
#endif
16
 
#include <libHX/defs.h>
17
 
#include <libHX/init.h>
18
 
#include <libHX/misc.h>
19
 
#include <libHX/string.h>
20
 
#include "internal.h"
21
 
 
22
 
static void t_mc(void)
23
 
{
24
 
        hxmc_t *s, *old_s;
25
 
 
26
 
        s = HXmc_meminit(NULL, 4096);
27
 
        printf("%zu\n", HXmc_length(s));
28
 
        if (HXmc_length(s) != 0)
29
 
                abort();
30
 
        old_s = s;
31
 
        HXmc_trunc(&s, 8192);
32
 
        if (old_s != s)
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));
37
 
        HXmc_free(s);
38
 
}
39
 
 
40
 
static void t_path(void)
41
 
{
42
 
        static const char *const paths[] = {
43
 
                ".", "..", "/", "//", "/.", "/./", "/./.",
44
 
                "/mnt", "//mnt", "/mnt/", "//mnt/", "//mnt//", "//mnt//root",
45
 
                "/mnt/.", "/mnt/./", "mnt", "mnt/", "mnt/root", "mnt/root/",
46
 
                "mnt//root", NULL
47
 
        };
48
 
        const char *const *iter;
49
 
        char *item;
50
 
 
51
 
        printf("# dirname\n");
52
 
        for (iter = paths; *iter != NULL; ++iter) {
53
 
                item = HX_dirname(*iter);
54
 
                printf("\t%s -> %s\n", *iter, item);
55
 
                free(item);
56
 
        }
57
 
 
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);
62
 
                free(item);
63
 
        }
64
 
 
65
 
        printf("# basename_fast\n");
66
 
        for (iter = paths; *iter != NULL; ++iter)
67
 
                printf("\t%s -> %s\n", *iter, HX_basename(*iter));
68
 
}
69
 
 
70
 
static void t_strcpy(void)
71
 
{
72
 
        hxmc_t *vp = NULL;
73
 
 
74
 
        HXmc_strcpy(&vp, NULL);
75
 
        if (vp != NULL)
76
 
                abort();
77
 
}
78
 
 
79
 
static void t_strncat(void)
80
 
{
81
 
        char data[5] = "DATA";
82
 
 
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);
87
 
 
88
 
        HX_strlcat(data, "pqrstuv__", 2);
89
 
        printf("String: >%s<\n", data);
90
 
 
91
 
        *data = '\0';
92
 
        HX_strlcat(data, "123456789", sizeof(data));
93
 
        printf("String: >%s<\n", data);
94
 
 
95
 
        *data = '\0';
96
 
        HX_strlncat(data, "123456789", sizeof(data), 9);
97
 
        printf("String: >%s<\n", data);
98
 
}
99
 
 
100
 
static void t_strsep(void)
101
 
{
102
 
        char b[] = "jengelh:x:1500:100:Jan Engelhardt:/home/jengelh:/bin/bash";
103
 
        char *wp = b, *ret;
104
 
 
105
 
        printf("# strsep\n");
106
 
        while ((ret = HX_strsep2(&wp, ":")) != NULL)
107
 
                printf("%s\n", ret);
108
 
}
109
 
 
110
 
static void t_split(void)
111
 
{
112
 
        char t1[] = "root:x:0:0:root:/root:/bin/bash";
113
 
        char t2[sizeof(t1)];
114
 
        int f0, f1, f2;
115
 
        char **a0, **a1, *a2[10];
116
 
        char *const *wp;
117
 
 
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);
122
 
 
123
 
        /* complete allocation */
124
 
        printf("HX_split1: a0[%p]:", a0);
125
 
        for (wp = a0; *wp != NULL; ++wp)
126
 
                printf(" %s[%p]", *wp, *wp);
127
 
        printf("\n");
128
 
 
129
 
        /* array allocated */
130
 
        printf("HX_split4: a1[%p]:", a1);
131
 
        for (wp = a1; *wp != NULL; ++wp)
132
 
                printf(" %s[%p]", *wp, *wp);
133
 
        printf("\n");
134
 
 
135
 
        /* nothing allocated */
136
 
        printf("HX_split5: a2[%p]:", a2);
137
 
        for (wp = a2; f2 > 0; --f2, ++wp)
138
 
                printf(" %s[%p]", *wp, *wp);
139
 
        printf("\n");
140
 
 
141
 
        HX_zvecfree(a0);
142
 
        free(a1);
143
 
}
144
 
 
145
 
static void t_split2(void)
146
 
{
147
 
        static const char tmp[] = "";
148
 
        int c = 0;
149
 
        char **a;
150
 
 
151
 
        a = HX_split(tmp, " ", &c, 6);
152
 
        printf("Got %d fields\n", c);
153
 
        HX_zvecfree(a);
154
 
}
155
 
 
156
 
static void t_quote(void)
157
 
{
158
 
        char *fm = NULL;
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 &amp; \"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));
166
 
        free(fm);
167
 
        if (HX_strquote("", -1, NULL) != NULL)
168
 
                printf("Something is fishy with strquote\n");
169
 
}
170
 
 
171
 
int main(int argc, const char **argv)
172
 
{
173
 
        hxmc_t *tx = NULL;
174
 
        const char *file = (argc >= 2) ? argv[1] : "tx-string.cpp";
175
 
        FILE *fp;
176
 
 
177
 
        if (HX_init() <= 0)
178
 
                abort();
179
 
 
180
 
        fp = fopen(file, "r");
181
 
        if (fp == NULL) {
182
 
                fprintf(stderr, "Cannot open %s: %s\n", file, strerror(errno));
183
 
        } else {
184
 
                while (HX_getl(&tx, fp) != NULL)
185
 
                        printf("%s", tx);
186
 
                fclose(fp);
187
 
        }
188
 
 
189
 
        t_mc();
190
 
        t_path();
191
 
        t_strcpy();
192
 
        t_strncat();
193
 
        t_strsep();
194
 
        t_split();
195
 
        t_split2();
196
 
        t_quote();
197
 
        HXmc_free(tx);
198
 
        HX_exit();
199
 
        return EXIT_SUCCESS;
200
 
}
 
1
#include "tc-string.c"