diff options
Diffstat (limited to 'src/csv.c')
| -rw-r--r-- | src/csv.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/csv.c b/src/csv.c new file mode 100644 index 0000000..907065e --- /dev/null +++ b/src/csv.c @@ -0,0 +1,38 @@ +#include "globals.h" + +char *csv_read(char **ptr) +{ + if(!ptr) + return NULL; + + char *start = *ptr; + bool quoted = false; + + while(**ptr) + { + char c = **ptr; + + if(c == '"') + { + quoted = !quoted; + } + + else if((c == ',' && !quoted) || + c == '\0' || + c == '\n') + { + char *ret = malloc(*ptr - start + 1); + ret[*ptr - start] = '\0'; + memcpy(ret, start, *ptr - start); + (*ptr)++; + + return ret; + } + + (*ptr)++; + } + + /* shouldn't get here */ + assert(false); + return NULL; +} |