annotate th_string.c @ 11:707e35b03f89

Synced th-libs.
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 22 Mar 2008 02:52:01 +0000
parents ecfa4e3597e3
children e47955d42b55
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
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 #define LPREV (pNode->pPrev)
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14 #define LNEXT (pNode->pNext)
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16 /* Allocate memory for a string with given length
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
17 */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
18 char *th_stralloc(const size_t l)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19 {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20 assert(l > 0);
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
21 return th_malloc(sizeof(char) * l);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
23
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
25 char *th_strrealloc(char * s, const size_t l)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
27 assert(l > 0);
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
28 return th_realloc(s, sizeof(char) * l);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32 /* Duplicate a string [strdup]
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
34 char *th_strdup(char * str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35 {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
36 char *result, *s, *d;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
38 if (!str) return NULL;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40 /* Allocate memory for destination */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
41 result = th_stralloc(strlen(str) + 1);
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
42 if (!result)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43 return NULL;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
45 /* Copy to the destination */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
46 s = str;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
47 d = result;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
48 while (*s) {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
49 *(d++) = *(s++);
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
51 *d = 0;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
53 return result;
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
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
57 char *th_strncpy(char * dst, char * src, size_t n)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
58 {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
59 char *s, *d;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
60 size_t i;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
61 assert(src);
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
62 assert(dst);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
63
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
64 /* Copy to the destination */
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
65 i = n;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
66 s = src;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
67 d = dst;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
68 while (*s && (i > 0)) {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
69 *(d++) = *(s++);
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
70 i--;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
71 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
72
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
73 /* Fill rest of space with zeros */
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
74 while (i > 0) {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
75 *(d++) = 0;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
76 i--;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
77 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
78
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
79 /* Ensure that last is always zero */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
80 dst[n - 1] = 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
81
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
82 return dst;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
83 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
84
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
85
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
86 int th_strncmp(char * str1, char * str2, size_t n)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
87 {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
88 char *s1, *s2;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
89 assert(str1);
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
90 assert(str2);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
91
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
92 /* Check the string pointers */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
93 if (str1 == str2)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
94 return 0;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
95
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
96 /* Go through the string */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
97 s1 = str1;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
98 s2 = str2;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
99 while ((n > 0) && *s1 && *s2 && (*s1 == *s2)) {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
100 s1++;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
101 s2++;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
102 n--;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
103 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
104
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105 if (n > 0)
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
106 return ((*s1) - (*s2));
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107 else
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
108 return 0;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
109 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
110
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
111
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
112 /* Compare two strings ignoring case [strcasecmp, strncasecmp]
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
113 */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
114 int th_strcasecmp(char * str1, char * str2)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
115 {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
116 char *s1 = str1, *s2 = str2;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
117 assert(str1);
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
118 assert(str2);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
119
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
120 /* Check the string pointers */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
121 if (str1 == str2)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
122 return 0;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
123
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
124 /* Go through the string */
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
125 while (*s1 && *s2 && (th_tolower(*s1) == th_tolower(*s2))) {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
126 s1++;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
127 s2++;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
128 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
129
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
130 return (th_tolower(*s1) - th_tolower(*s2));
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
131 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
132
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
133
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
134 int th_strncasecmp(char * str1, char * str2, size_t n)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
135 {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
136 char *s1 = str1, *s2 = str2;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
137 assert(str1);
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
138 assert(str2);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
140 /* Check the string pointers */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
141 if (str1 == str2)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
142 return 0;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
143
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
144 /* Go through the string */
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
145 while ((n > 0) && *s1 && *s2 && (th_tolower(*s1) == th_tolower(*s2))) {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
146 s1++;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
147 s2++;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
148 n--;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
149 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
150
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
151 if (n > 0)
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
152 return (th_tolower(*s1) - th_tolower(*s2));
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
153 else
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
154 return 0;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
155 }
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 /* Remove all occurences of control characters, in-place.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
159 * Resulting string is always shorter or same length than original.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
160 */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
161 void th_strip_ctrlchars(char * str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
162 {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
163 char *i, *j;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
164 assert(str);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
165
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
166 i = str;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
167 j = str;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
168 while (*i) {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
169 if (!th_iscntrl(*i))
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
170 *(j++) = *i;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
171 i++;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
172 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
173
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
174 *j = 0;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
175 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
176
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
177
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
178 /* Copy a given string over in *result.
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
179 */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
180 int th_pstrcpy(char ** result, char * str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181 {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
182 assert(result);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184 /* Check the string pointers */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
185 if (!str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
186 return -1;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
187
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
188 /* Allocate memory for destination */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
189 th_free(*result);
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
190 *result = th_stralloc(strlen(str) + 1);
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
191 if (!*result)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
192 return -2;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
193
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
194 /* Copy to the destination */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
195 strcpy(*result, str);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
196
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
197 return 0;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
198 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
199
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
201 /* Concatenates a given string into string pointed by *result.
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202 */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
203 int th_pstrcat(char ** result, char * str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
204 {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
205 assert(result);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
206
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
207 /* Check the string pointers */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
208 if (!str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
209 return -1;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
210
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
211 if (*result != NULL) {
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
212 *result = th_strrealloc(*result, strlen(*result) + strlen(str) + 1);
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
213 if (*result == NULL)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
214 return -1;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
215
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
216 strcat(*result, str);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
217 } else {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
218 *result = th_stralloc(strlen(str) + 1);
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
219 if (*result == NULL)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
220 return -1;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
221
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
222 strcpy(*result, str);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
223 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
224
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
225 return 0;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
226 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
227
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
228
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
229 /* Find next non-whitespace character in string.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
230 * Updates iPos into the position of such character and
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
231 * returns pointer to the string.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
232 */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
233 char *th_findnext(char * str, size_t * iPos)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
234 {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
235 assert(str);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
236
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
237 /* Terminating NULL-character is not whitespace! */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
238 while (th_isspace(str[*iPos]))
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
239 (*iPos)++;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
240 return &str[*iPos];
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
241 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
242
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
243
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
244 /* Find next chSep-character from string
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
245 */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
246 char *th_findsep(char * str, size_t * iPos, char chSep)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
247 {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
248 assert(str);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
249
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
250 /* Terminating NULL-character is not digit! */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
251 while (str[*iPos] && (str[*iPos] != chSep))
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
252 (*iPos)++;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
253 return &str[*iPos];
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
254 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
255
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
256
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
257 /* Find next chSep- or whitespace from string
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
258 */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
259 char *th_findseporspace(char * str, size_t * iPos, char chSep)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
260 {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
261 assert(str);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
262
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
263 /* Terminating NULL-character is not digit! */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
264 while (!th_isspace(str[*iPos]) && (str[*iPos] != chSep))
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
265 (*iPos)++;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
266 return &str[*iPos];
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
267 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
268
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
269
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
270 /* Compare a string to a pattern. Case-SENSITIVE version.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
271 * The matching pattern can consist of any normal characters plus
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
272 * wildcards ? and *. "?" matches any character and "*" matches
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
273 * any number of characters.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
274 */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
275 BOOL th_strmatch(char * str, char * pattern)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
276 {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
277 BOOL didMatch, isAnyMode, isEnd;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
278 char *tmpPattern;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
279
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
280 /* Check given pattern and string */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
281 if (!str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
282 return FALSE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
283 if (!pattern)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
284 return FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
285
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
286 /* Initialize */
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
287 tmpPattern = NULL;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
288 didMatch = TRUE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
289 isEnd = FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
290 isAnyMode = FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
291
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
292 /* Start comparision */
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
293 do {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
294 didMatch = FALSE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
295 switch (*pattern) {
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
296 case '?':
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
297 /* Any single character matches */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
298 if (*str) {
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
299 didMatch = TRUE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
300 pattern++;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
301 str++;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
302 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
303 break;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
304
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
305 case '*':
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
306 didMatch = TRUE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
307 pattern++;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
308 if (!*pattern)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
309 isEnd = TRUE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
310 isAnyMode = TRUE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
311 tmpPattern = pattern;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
312 break;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
313
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
314 case 0:
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
315 if (isAnyMode) {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
316 if (*str)
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
317 str++;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
318 else
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
319 isEnd = TRUE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
320 } else {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
321 if (*str) {
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
322 if (tmpPattern) {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
323 isAnyMode = TRUE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
324 pattern = tmpPattern;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
325 } else
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
326 didMatch = FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
327 } else
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
328 isEnd = TRUE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
329 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
330 break;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
331 default:
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
332 if (isAnyMode) {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
333 if ((*pattern) == (*str)) {
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
334 isAnyMode = FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
335 didMatch = TRUE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
336 } else {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
337 if (*str) {
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
338 didMatch = TRUE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
339 str++;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
340 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
341 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
342 } else {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
343 if ((*pattern) == (*str)) {
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
344 didMatch = TRUE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
345 if (*pattern)
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
346 pattern++;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
347 if (*str)
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
348 str++;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
349 } else {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
350 if (tmpPattern) {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
351 didMatch = TRUE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
352 isAnyMode = TRUE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
353 pattern = tmpPattern;
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
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
358 if (!*str && !*pattern)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
359 isEnd = TRUE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
360 break;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
361
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
362 } /* switch */
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
363
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
364 } while ((didMatch) && (!isEnd));
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
365
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
366 return didMatch;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
367 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
368
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
369
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
370 /* Compare a string to a pattern. Case-INSENSITIVE version.
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
371 */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
372 BOOL th_strcasematch(char * str, char * pattern)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
373 {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
374 BOOL didMatch, isAnyMode, isEnd;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
375 char *tmpPattern;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
376
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
377 /* Check given pattern and string */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
378 if (!str)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
379 return FALSE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
380 if (!pattern)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
381 return FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
382
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
383 /* Initialize */
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
384 tmpPattern = NULL;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
385 didMatch = TRUE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
386 isEnd = FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
387 isAnyMode = FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
388
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
389 /* Start comparision */
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
390 do {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
391 switch (*pattern) {
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
392 case '?':
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
393 /* Any single character matches */
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
394 if (*str) {
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
395 pattern++;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
396 str++;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
397 } else
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
398 didMatch = FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
399 break;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
400
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
401 case '*':
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
402 pattern++;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
403 if (!*pattern || (*pattern == '?'))
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
404 isEnd = TRUE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
405 isAnyMode = TRUE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
406 tmpPattern = pattern;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
407 break;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
408
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
409 case 0:
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
410 if (isAnyMode) {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
411 if (*str)
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
412 str++;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
413 else
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
414 isEnd = TRUE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
415 } else {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
416 if (*str) {
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
417 if (tmpPattern) {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
418 isAnyMode = TRUE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
419 pattern = tmpPattern;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
420 } else
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
421 didMatch = FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
422 } else
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
423 isEnd = TRUE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
424 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
425 break;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
426
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
427 default:
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
428 if (isAnyMode) {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
429 if (th_tolower(*pattern) == th_tolower(*str)) {
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
430 isAnyMode = FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
431 } else {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
432 if (*str)
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
433 str++;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
434 else
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
435 didMatch = FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
436 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
437 } else {
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
438 if (th_tolower(*pattern) == th_tolower(*str)) {
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
439 if (*pattern)
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
440 pattern++;
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
441 if (*str)
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
442 str++;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
443 } else {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
444 if (tmpPattern) {
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
445 isAnyMode = TRUE;
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
446 pattern = tmpPattern;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
447 } else
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
448 didMatch = FALSE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
449 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
450 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
451
11
707e35b03f89 Synced th-libs.
Matti Hamalainen <ccr@tnsp.org>
parents: 2
diff changeset
452 if (!*str && !*pattern)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
453 isEnd = TRUE;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
454 break;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
455
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
456 } /* switch */
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
457
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
458 } while ((didMatch) && (!isEnd));
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
459
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
460 return didMatch;
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
461 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
462