]> sigrok.org Git - libsigrok.git/commitdiff
input/csv: unobfuscate text line to column splitting
authorGerhard Sittig <redacted>
Sun, 13 Oct 2019 14:39:51 +0000 (16:39 +0200)
committerGerhard Sittig <redacted>
Sat, 21 Dec 2019 17:20:04 +0000 (18:20 +0100)
The parse_line() routine is rather complex, optionally accepts an upper
limit for the number of columns, but unconditionally assumes a first one
and drops preceeding fields. The rather generic n and k identifiers are
not helpful.

Use the 'seen' and 'taken' names instead which better reflect what's
actually happening. Remove empty lines which used to tear apart groups
of instructions which are strictly related. This organization neither
was helpful during maintenance.

src/input/csv.c

index b1645e73d9d69a4e01b44f6b615032714fbc966f..ed054e335450d7370d02f62eff2d62f054f7d1d3 100644 (file)
@@ -320,42 +320,39 @@ static char **parse_line(char *buf, struct context *inc, ssize_t max_cols)
        GSList *list, *l;
        char **columns;
        char *column;
-       gsize n, k;
+       gsize seen, taken;
 
-       n = 0;
-       k = 0;
+       seen = 0;
+       taken = 0;
        list = NULL;
 
        remainder = buf;
        str = strstr(remainder, inc->delimiter->str);
-
        while (str && max_cols) {
-               if (n >= inc->first_column) {
+               if (seen >= inc->first_column) {
                        column = g_strndup(remainder, str - remainder);
                        list = g_slist_prepend(list, g_strstrip(column));
 
                        max_cols--;
-                       k++;
+                       taken++;
                }
 
                remainder = str + inc->delimiter->len;
                str = strstr(remainder, inc->delimiter->str);
-               n++;
+               seen++;
        }
 
-       if (buf[0] && max_cols && n >= inc->first_column) {
+       if (buf[0] && max_cols && seen >= inc->first_column) {
                column = g_strdup(remainder);
                list = g_slist_prepend(list, g_strstrip(column));
-               k++;
+               taken++;
        }
 
-       if (!(columns = g_try_new(char *, k + 1)))
+       if (!(columns = g_try_new(char *, taken + 1)))
                return NULL;
-
-       columns[k--] = NULL;
-
+       columns[taken--] = NULL;
        for (l = list; l; l = l->next)
-               columns[k--] = l->data;
+               columns[taken--] = l->data;
 
        g_slist_free(list);