1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
/* $Id: strv.c 1729 2004-07-02 12:41:27Z twogood $ */
#define _GNU_SOURCE 1
#include "strv.h"
#include <synce_log.h>
#include <stdlib.h>
#include <string.h>
#include "internal.h"
char** strsplit(const char* source, int separator)/*{{{*/
{
int i;
int count = 0;
const char* p = NULL;
char** result = NULL;
size_t length = 0;
if (!source)
return NULL;
for (p = source; *p; p++)
if (separator == *p)
count++;
result = malloc((count + 2) * sizeof(char*));
for (p = source, i = 0; i < count; i++)
{
length = strchr(p, separator) - p;
result[i] = strndup(p, length);
p += length + 1;
}
result[i++] = strdup(p);
result[i] = NULL;
return result;
}/*}}}*/
void strv_dump(char** strv)/*{{{*/
{
char** pp;
for (pp = strv; *pp; pp++)
synce_trace("'%s'", *pp);
}/*}}}*/
void strv_free(char** strv)/*{{{*/
{
char** pp;
for (pp = strv; *pp; pp++)
free(*pp);
free(strv);
}/*}}}*/
|