200 {
201 char *tmp = NULL;
202 char **rtn = NULL;
203 char *token = NULL;
204
205 *n = 0;
207 return NULL;
208
209
210 tmp =
rtalloc(
sizeof(
char) * (strlen(
str) + 1));
211 if (NULL == tmp) {
212 rterror(
_(
"strsplit: Not enough memory"));
213 return NULL;
214 }
216
217 if (!strlen(tmp) || !delimiter || !strlen(delimiter)) {
218 *n = 1;
219 rtn = (
char **)
rtalloc(*n *
sizeof(
char *));
220 if (NULL == rtn) {
221 rterror(
_(
"strsplit: Not enough memory"));
222 return NULL;
223 }
224 rtn[0] = (
char *)
rtalloc(
sizeof(
char) * (strlen(tmp) + 1));
225 if (NULL == rtn[0]) {
226 rterror(
_(
"strsplit: Not enough memory"));
227 return NULL;
228 }
229 strcpy(rtn[0], tmp);
231 return rtn;
232 }
233
234 token = strtok(tmp, delimiter);
235 while (token != NULL) {
236 if (*n < 1) {
237 rtn = (
char **)
rtalloc(
sizeof(
char *));
238 }
239 else {
240 rtn = (
char **)
rtrealloc(rtn, (*n + 1) *
sizeof(
char *));
241 }
242 if (NULL == rtn) {
243 rterror(
_(
"strsplit: Not enough memory"));
244 return NULL;
245 }
246
247 rtn[*n] = NULL;
248 rtn[*n] = (
char *)
rtalloc(
sizeof(
char) * (strlen(token) + 1));
249 if (NULL == rtn[*n]) {
250 rterror(
_(
"strsplit: Not enough memory"));
251 return NULL;
252 }
253
254 strcpy(rtn[*n], token);
255 *n = *n + 1;
256
257 token = strtok(NULL, delimiter);
258 }
259
261 return rtn;
262}
void rterror(const char *fmt,...)
Wrappers used for reporting errors and info.
void * rtalloc(size_t size)
Wrappers used for managing memory.
void * rtrealloc(void *mem, size_t size)
void rtdealloc(void *mem)