annotate th_string.c @ 322:b9c15c57dc8f

Clean up message functions, add new printMsgQ() helper function for messages that should not go into the log file. Add skeleton help function, accessible via F1 key. And other cleanups.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 11 Jun 2011 09:48:26 +0300
parents f1049f487987
children fae4651d37bc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 /*
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 * Miscellaneous string-handling related utility-functions
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 * Programmed and designed by Matti 'ccr' Hamalainen
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 * (C) Copyright 2002-2008 Tecnic Software productions (TNSP)
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5 *
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 * Please read file 'COPYING' for information on license and distribution.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 */
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 #ifdef HAVE_CONFIG_H
2
ecfa4e3597e3 Cleanups in th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
9 #include "config.h"
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10 #endif
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
11 #include "th_string.h"
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
12
79
e36df57c5b0f Use th_strdup() again.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
13 /* strdup with a NULL check
e36df57c5b0f Use th_strdup() again.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
14 */
e36df57c5b0f Use th_strdup() again.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
15 char *th_strdup(const char *s)
e36df57c5b0f Use th_strdup() again.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
16 {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
17 char *res;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
18 if (s == NULL)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
19 return NULL;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
20
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
21 if ((res = th_malloc(strlen(s) + 1)) == NULL)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
22 return NULL;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
23
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
24 strcpy(res, s);
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
25 return res;
79
e36df57c5b0f Use th_strdup() again.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
26 }
e36df57c5b0f Use th_strdup() again.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
27
e36df57c5b0f Use th_strdup() again.
Matti Hamalainen <ccr@tnsp.org>
parents: 47
diff changeset
28
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
29 char *th_strncpy(char * dst, const char * src, const size_t n)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30 {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
31 const char *s = src;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
32 char *d = dst;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
33 size_t i;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
34 assert(src != NULL);
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
35 assert(dst != NULL);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
37 /* Copy to the destination */
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
38 i = n;
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
39 while (*s && i > 0) {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
40 *(d++) = *(s++);
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
41 i--;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
42 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
44 /* Fill rest of space with zeros */
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
45 while (i > 0) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
46 *(d++) = 0;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
47 i--;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
48 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
49
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
50 /* Ensure that last is always zero */
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
51 dst[n - 1] = 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
53 return dst;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
54 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
55
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
56
126
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
57 /* Simulate a sprintf() that allocates memory
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
58 */
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
59 char * th_strdup_vprintf(const char *fmt, va_list args)
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
60 {
127
f741718d13c5 Portability fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 126
diff changeset
61 int size = 100;
126
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
62 char *buf, *nbuf = NULL;
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
63
126
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
64 if ((buf = th_malloc(size)) == NULL)
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
65 return NULL;
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
66
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
67 while (1) {
127
f741718d13c5 Portability fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 126
diff changeset
68 int n = vsnprintf(buf, size, fmt, args);
126
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
69 if (n > -1 && n < size)
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
70 return buf;
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
71 if (n > -1)
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
72 size = n + 1;
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
73 else
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
74 size *= 2;
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
75
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
76 if ((nbuf = th_realloc(nbuf, size)) == NULL) {
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
77 th_free(buf);
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
78 return NULL;
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
79 }
126
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
80
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
81 buf = nbuf;
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
82 }
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
83 }
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
84
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
85
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
86 char * th_strdup_printf(const char *fmt, ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
87 {
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
88 char *res;
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
89 va_list ap;
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
90
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
91 va_start(ap, fmt);
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
92 res = th_strdup_vprintf(fmt, ap);
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
93 va_end(ap);
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
94
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
95 return res;
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
96 }
126
Matti Hamalainen <ccr@tnsp.org>
parents: 124
diff changeset
97
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
98
282
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
99 void th_pstr_vprintf(char **buf, const char *fmt, va_list ap)
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
100 {
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
101 char *tmp = th_strdup_vprintf(fmt, ap);
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
102 th_free(*buf);
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
103 *buf = tmp;
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
104 }
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
105
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
106
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
107 void th_pstr_printf(char **buf, const char *fmt, ...)
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
108 {
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
109 char *tmp;
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
110 va_list ap;
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
111
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
112 va_start(ap, fmt);
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
113 tmp = th_strdup_vprintf(fmt, ap);
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
114 va_end(ap);
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
115
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
116 th_free(*buf);
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
117 *buf = tmp;
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
118 }
3dc86d8eb0a9 Added helper functions for easier string manipulation.
Matti Hamalainen <ccr@tnsp.org>
parents: 244
diff changeset
119
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
120 /* Compare two strings ignoring case [strcasecmp, strncasecmp]
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
121 */
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
122 int th_strcasecmp(const char * str1, const char * str2)
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
123 {
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
124 const char *s1 = str1, *s2 = str2;
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
125 assert(str1 != NULL);
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
126 assert(str2 != NULL);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
127
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
128 if (str1 == str2)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
129 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
130
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
131 while (*s1 && *s2 && th_tolower(*s1) == th_tolower(*s2)) {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
132 s1++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
133 s2++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
134 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
135
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
136 return (th_tolower(*s1) - th_tolower(*s2));
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
137 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
138
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
140 int th_strncasecmp(const char * str1, const char * str2, size_t n)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
141 {
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
142 const char *s1 = str1, *s2 = str2;
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
143 assert(str1 != NULL);
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
144 assert(str2 != NULL);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
145
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
146 if (str1 == str2)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
147 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
148
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
149 while (n > 0 && *s1 && *s2 && th_tolower(*s1) == th_tolower(*s2)) {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
150 s1++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
151 s2++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
152 n--;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
153 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
154
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
155 return n > 0 ? (th_tolower(*s1) - th_tolower(*s2)) : 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
156 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
157
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
158
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
159 /* Remove all occurences of control characters, in-place.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
160 * Resulting string is always shorter or same length than original.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
161 */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
162 void th_strip_ctrlchars(char * str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
163 {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
164 char *i, *j;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
165 assert(str != NULL);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
166
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
167 i = str;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
168 j = str;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
169 while (*i) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
170 if (!th_iscntrl(*i))
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
171 *(j++) = *i;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
172 i++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
173 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
174
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
175 *j = 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
176 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
177
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
178
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
179 /* Copy a given string over in *result.
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
180 */
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
181 int th_pstrcpy(char ** result, const char * str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
182 {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
183 assert(result != NULL);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
185 if (str == NULL)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
186 return -1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
187
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
188 th_free(*result);
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
189 if ((*result = th_malloc(strlen(str) + 1)) == NULL)
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
190 return -2;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
191
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
192 strcpy(*result, str);
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
193 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
194 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
195
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
196
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
197 /* Concatenates a given string into string pointed by *result.
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
198 */
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
199 int th_pstrcat(char ** result, const char * str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200 {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
201 assert(result != NULL);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
203 if (str == NULL)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
204 return -1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
205
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
206 if (*result != NULL) {
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
207 *result = th_realloc(*result, strlen(*result) + strlen(str) + 1);
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
208 if (*result == NULL)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
209 return -1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
210
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
211 strcat(*result, str);
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
212 } else {
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
213 *result = th_malloc(strlen(str) + 1);
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
214 if (*result == NULL)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
215 return -1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
216
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
217 strcpy(*result, str);
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
218 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
219
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
220 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
221 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
222
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
223
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
224 /* Find next non-whitespace character in string.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
225 * Updates iPos into the position of such character and
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
226 * returns pointer to the string.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
227 */
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
228 const char *th_findnext(const char * str, size_t * pos)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
229 {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
230 assert(str != NULL);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
231
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
232 /* Terminating NULL-character is not whitespace! */
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
233 while (th_isspace(str[*pos]))
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
234 (*pos)++;
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
235 return &str[*pos];
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
236 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
237
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
238
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
239 /* Find next sep-character from string
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
240 */
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
241 const char *th_findsep(const char * str, size_t * pos, char sep)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
242 {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
243 assert(str != NULL);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
244
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
245 while (str[*pos] && str[*pos] != sep)
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
246 (*pos)++;
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
247
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
248 return &str[*pos];
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
249 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
250
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
251
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
252 /* Find next sep- or whitespace from string
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
253 */
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
254 const char *th_findseporspace(const char * str, size_t * pos, char sep)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
255 {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
256 assert(str != NULL);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
257
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
258 while (!th_isspace(str[*pos]) && str[*pos] != sep)
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
259 (*pos)++;
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
260
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
261 return &str[*pos];
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
262 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
263
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
264
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
265 /* Compare a string to a pattern. Case-SENSITIVE version.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
266 * The matching pattern can consist of any normal characters plus
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
267 * wildcards ? and *. "?" matches any character and "*" matches
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
268 * any number of characters.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
269 */
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
270 BOOL th_strmatch(const char * str, const char * pattern)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
271 {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
272 BOOL didMatch = TRUE, isAnyMode = FALSE, isEnd = FALSE;
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
273 const char *tmpPattern = NULL;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
274
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
275 /* Check given pattern and string */
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
276 if (str == NULL || pattern == NULL)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
277 return FALSE;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
278
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
279 /* Start comparision */
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
280 do {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
281 didMatch = FALSE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
282 switch (*pattern) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
283 case '?':
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
284 /* Any single character matches */
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
285 if (*str) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
286 didMatch = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
287 pattern++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
288 str++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
289 }
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
290 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
291
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
292 case '*':
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
293 didMatch = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
294 pattern++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
295 if (!*pattern)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
296 isEnd = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
297 isAnyMode = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
298 tmpPattern = pattern;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
299 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
300
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
301 case 0:
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
302 if (isAnyMode) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
303 if (*str)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
304 str++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
305 else
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
306 isEnd = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
307 } else {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
308 if (*str) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
309 if (tmpPattern) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
310 isAnyMode = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
311 pattern = tmpPattern;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
312 } else
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
313 didMatch = FALSE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
314 } else
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
315 isEnd = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
316 }
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
317 break;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
318 default:
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
319 if (isAnyMode) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
320 if (*pattern == *str) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
321 isAnyMode = FALSE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
322 didMatch = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
323 } else {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
324 if (*str) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
325 didMatch = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
326 str++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
327 }
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
328 }
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
329 } else {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
330 if (*pattern == *str) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
331 didMatch = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
332 if (*pattern)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
333 pattern++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
334 if (*str)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
335 str++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
336 } else {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
337 if (tmpPattern) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
338 didMatch = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
339 isAnyMode = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
340 pattern = tmpPattern;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
341 }
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
342 }
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
343 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
344
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
345 if (!*str && !*pattern)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
346 isEnd = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
347 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
348
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
349 } /* switch */
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
350
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
351 } while (didMatch && !isEnd);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
352
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
353 return didMatch;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
354 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
355
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
356
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
357 /* Compare a string to a pattern. Case-INSENSITIVE version.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
358 */
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
359 BOOL th_strcasematch(const char * str, const char * pattern)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
360 {
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
361 BOOL didMatch = TRUE, isAnyMode = FALSE, isEnd = FALSE;
124
Matti Hamalainen <ccr@tnsp.org>
parents: 81
diff changeset
362 const char *tmpPattern = NULL;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
363
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
364 /* Check given pattern and string */
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
365 if (str == NULL || pattern == NULL)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
366 return FALSE;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
367
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
368 /* Start comparision */
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
369 do {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
370 switch (*pattern) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
371 case '?':
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
372 /* Any single character matches */
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
373 if (*str) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
374 pattern++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
375 str++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
376 } else
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
377 didMatch = FALSE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
378 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
379
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
380 case '*':
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
381 pattern++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
382 if (!*pattern || *pattern == '?')
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
383 isEnd = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
384 isAnyMode = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
385 tmpPattern = pattern;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
386 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
387
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
388 case 0:
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
389 if (isAnyMode) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
390 if (*str)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
391 str++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
392 else
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
393 isEnd = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
394 } else {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
395 if (*str) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
396 if (tmpPattern) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
397 isAnyMode = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
398 pattern = tmpPattern;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
399 } else
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
400 didMatch = FALSE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
401 } else
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
402 isEnd = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
403 }
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
404 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
405
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
406 default:
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
407 if (isAnyMode) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
408 if (th_tolower(*pattern) == th_tolower(*str)) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
409 isAnyMode = FALSE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
410 } else {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
411 if (*str)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
412 str++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
413 else
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
414 didMatch = FALSE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
415 }
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
416 } else {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
417 if (th_tolower(*pattern) == th_tolower(*str)) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
418 if (*pattern)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
419 pattern++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
420 if (*str)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
421 str++;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
422 } else {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
423 if (tmpPattern) {
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
424 isAnyMode = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
425 pattern = tmpPattern;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
426 } else
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
427 didMatch = FALSE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
428 }
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
429 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
430
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
431 if (!*str && !*pattern)
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
432 isEnd = TRUE;
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
433 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
434
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
435 } /* switch */
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
436
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
437 } while (didMatch && !isEnd);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
438
81
69aed051f84d Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 79
diff changeset
439 return didMatch;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
440 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
441
131
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
442
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
443 int th_get_hex_triplet(const char *str)
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
444 {
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
445 const char *p = str;
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
446 int len, val = 0;
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
447
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
448 for (len = 0; *p && len < 6; p++, len++) {
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
449 if (*p >= '0' && *p <= '9') {
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
450 val *= 16; val += (*p - '0');
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
451 } else if (*p >= 'A' && *p <= 'F') {
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
452 val *= 16; val += (*p - 'A') + 10;
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
453 } else if (*p >= 'a' && *p <= 'f') {
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
454 val *= 16; val += (*p - 'a') + 10;
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
455 } else
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
456 return -1;
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
457 }
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
458
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
459 return (len == 6) ? val : -1;
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
460 }
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
461
3896861974ac Added th_get_hex_triplet().
Matti Hamalainen <ccr@tnsp.org>
parents: 127
diff changeset
462
243
589f5e37dd91 Staticize.
Matti Hamalainen <ccr@tnsp.org>
parents: 241
diff changeset
463 static BOOL th_growbuf(char **buf, size_t *bufsize, size_t *len, size_t grow)
241
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
464 {
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
465 assert(buf != NULL);
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
466 assert(bufsize != NULL);
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
467 assert(len != NULL);
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
468
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
469 if (*buf == NULL)
287
eb74097b73f5 Make th_vputch() and th_vputs() return a boolean value for success and failure respectively. Also fix a grave bug in th_growbuf().
Matti Hamalainen <ccr@tnsp.org>
parents: 282
diff changeset
470 *bufsize = *len = 0;
241
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
471
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
472 if (*buf == NULL || *len + grow >= *bufsize) {
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
473 *bufsize += grow + TH_BUFGROW;
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
474 *buf = (char *) th_realloc(*buf, *bufsize);
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
475 if (*buf == NULL)
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
476 return FALSE;
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
477 }
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
478 return TRUE;
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
479 }
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
480
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
481
287
eb74097b73f5 Make th_vputch() and th_vputs() return a boolean value for success and failure respectively. Also fix a grave bug in th_growbuf().
Matti Hamalainen <ccr@tnsp.org>
parents: 282
diff changeset
482 BOOL th_vputch(char **buf, size_t *bufsize, size_t *len, const char ch)
241
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
483 {
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
484 if (!th_growbuf(buf, bufsize, len, 1))
287
eb74097b73f5 Make th_vputch() and th_vputs() return a boolean value for success and failure respectively. Also fix a grave bug in th_growbuf().
Matti Hamalainen <ccr@tnsp.org>
parents: 282
diff changeset
485 return FALSE;
241
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
486
244
517c7b22b3c9 Buffer pointer handling was wrong in th_vaddch(), fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
487 (*buf)[*len] = ch;
241
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
488 (*len)++;
287
eb74097b73f5 Make th_vputch() and th_vputs() return a boolean value for success and failure respectively. Also fix a grave bug in th_growbuf().
Matti Hamalainen <ccr@tnsp.org>
parents: 282
diff changeset
489
eb74097b73f5 Make th_vputch() and th_vputs() return a boolean value for success and failure respectively. Also fix a grave bug in th_growbuf().
Matti Hamalainen <ccr@tnsp.org>
parents: 282
diff changeset
490 return TRUE;
241
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
491 }
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
492
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
493
287
eb74097b73f5 Make th_vputch() and th_vputs() return a boolean value for success and failure respectively. Also fix a grave bug in th_growbuf().
Matti Hamalainen <ccr@tnsp.org>
parents: 282
diff changeset
494 BOOL th_vputs(char **buf, size_t *bufsize, size_t *len, const char *str)
241
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
495 {
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
496 size_t slen;
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
497 if (str == NULL)
287
eb74097b73f5 Make th_vputch() and th_vputs() return a boolean value for success and failure respectively. Also fix a grave bug in th_growbuf().
Matti Hamalainen <ccr@tnsp.org>
parents: 282
diff changeset
498 return FALSE;
241
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
499
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
500 slen = strlen(str);
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
501 if (!th_growbuf(buf, bufsize, len, slen))
287
eb74097b73f5 Make th_vputch() and th_vputs() return a boolean value for success and failure respectively. Also fix a grave bug in th_growbuf().
Matti Hamalainen <ccr@tnsp.org>
parents: 282
diff changeset
502 return FALSE;
241
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
503
290
f1049f487987 Use strcpy() instead of strcat().
Matti Hamalainen <ccr@tnsp.org>
parents: 287
diff changeset
504 strcpy(*buf + *len, str);
241
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
505 (*len) += slen;
287
eb74097b73f5 Make th_vputch() and th_vputs() return a boolean value for success and failure respectively. Also fix a grave bug in th_growbuf().
Matti Hamalainen <ccr@tnsp.org>
parents: 282
diff changeset
506
eb74097b73f5 Make th_vputch() and th_vputs() return a boolean value for success and failure respectively. Also fix a grave bug in th_growbuf().
Matti Hamalainen <ccr@tnsp.org>
parents: 282
diff changeset
507 return TRUE;
241
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
508 }
a1ee6c76ca1c Functions for growing a string buffer when needed.
Matti Hamalainen <ccr@tnsp.org>
parents: 131
diff changeset
509