aboutsummaryrefslogtreecommitdiff
path: root/src/csv.c
blob: 907065e2ce0bc3d6fe43583b19b0e23050abc97e (plain)
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
#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;
}