From f5c7e492d8d6b7b4fa1298342ea6157bd2ada564 Mon Sep 17 00:00:00 2001 From: Franklin Wei Date: Mon, 18 May 2015 19:38:13 -0400 Subject: refactor csv parsing --- src/csv.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/csv.c (limited to 'src/csv.c') 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; +} -- cgit v1.1