209 {
210 char *tmp = NULL;
211 char **rtn = NULL;
212 char *token = NULL;
213
214 *n = 0;
216 return NULL;
217
218
219 tmp =
rtalloc(
sizeof(
char) * (strlen(
str) + 1));
220 if (NULL == tmp) {
221 rterror(
_(
"strsplit: Not enough memory"));
222 return NULL;
223 }
225
226 if (!strlen(tmp) || !delimiter || !strlen(delimiter)) {
227 *n = 1;
228 rtn = (
char **)
rtalloc(*n *
sizeof(
char *));
229 if (NULL == rtn) {
230 rterror(
_(
"strsplit: Not enough memory"));
231 return NULL;
232 }
233 rtn[0] = (
char *)
rtalloc(
sizeof(
char) * (strlen(tmp) + 1));
234 if (NULL == rtn[0]) {
235 rterror(
_(
"strsplit: Not enough memory"));
236 return NULL;
237 }
238 strcpy(rtn[0], tmp);
240 return rtn;
241 }
242
243 token = strtok(tmp, delimiter);
244 while (token != NULL) {
245 if (*n < 1) {
246 rtn = (
char **)
rtalloc(
sizeof(
char *));
247 }
248 else {
249 rtn = (
char **)
rtrealloc(rtn, (*n + 1) *
sizeof(
char *));
250 }
251 if (NULL == rtn) {
252 rterror(
_(
"strsplit: Not enough memory"));
253 return NULL;
254 }
255
256 rtn[*n] = NULL;
257 rtn[*n] = (
char *)
rtalloc(
sizeof(
char) * (strlen(token) + 1));
258 if (NULL == rtn[*n]) {
259 rterror(
_(
"strsplit: Not enough memory"));
260 return NULL;
261 }
262
263 strcpy(rtn[*n], token);
264 *n = *n + 1;
265
266 token = strtok(NULL, delimiter);
267 }
268
270 return rtn;
271}
void rterror(const char *fmt,...) __attribute__((format(printf
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)