aboutsummaryrefslogtreecommitdiff
path: root/src/csv.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2015-05-18 19:38:13 -0400
committerFranklin Wei <git@fwei.tk>2015-05-18 19:38:13 -0400
commitf5c7e492d8d6b7b4fa1298342ea6157bd2ada564 (patch)
treecbfc8b7c5e5dfce6aac62b49f5cc50735da38663 /src/csv.c
parent9b9697747aa55651680b196d4930203ef15d1c47 (diff)
downloadmarket-sim-f5c7e492d8d6b7b4fa1298342ea6157bd2ada564.zip
market-sim-f5c7e492d8d6b7b4fa1298342ea6157bd2ada564.tar.gz
market-sim-f5c7e492d8d6b7b4fa1298342ea6157bd2ada564.tar.bz2
market-sim-f5c7e492d8d6b7b4fa1298342ea6157bd2ada564.tar.xz
refactor csv parsing
Diffstat (limited to 'src/csv.c')
-rw-r--r--src/csv.c38
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;
+}