SMOLNET PORTAL home about changes
iadd tests and cleanup I/O function - ics2txt - convert icalendar .ics file to plain text	Err	bitreich.org	70
hgit clone git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt	URL:git://bitreich.org/ics2txt git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ics2txt	bitreich.org	70
1Log	/scm/ics2txt/log.gph	bitreich.org	70
1Files	/scm/ics2txt/files.gph	bitreich.org	70
1Refs	/scm/ics2txt/refs.gph	bitreich.org	70
1Tags	/scm/ics2txt/tag	bitreich.org	70
1README	/scm/ics2txt/file/README.md.gph	bitreich.org	70
i---	Err	bitreich.org	70
1commit a7b4ceeaf4a57476c0952e0da2def5f92bdfdb9f	/scm/ics2txt/commit/a7b4ceeaf4a57476c0952e0da2def5f92bdfdb9f.gph	bitreich.org	70
1parent 94bccd0b9ea7049ebeec4fcf2416f6f0b7d221b5	/scm/ics2txt/commit/94bccd0b9ea7049ebeec4fcf2416f6f0b7d221b5.gph	bitreich.org	70
hAuthor: Josuah Demangeon <me@josuah.net>	URL:mailto:me@josuah.net	bitreich.org	70
iDate:   Sun, 28 Jun 2020 10:34:46 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iadd tests and cleanup I/O function	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M ics2tsv.c                           |       7 +++++--	Err	bitreich.org	70
i  M src/ical.c                          |      72 +++++++++----------------------	Err	bitreich.org	70
i  M src/ical.h                          |       2 +-	Err	bitreich.org	70
i  M src/map.c                           |       6 ++++++	Err	bitreich.org	70
i  M src/map.h                           |       1 +	Err	bitreich.org	70
i  M src/util.c                          |       5 +++--	Err	bitreich.org	70
i  A test/map.c                          |      18 ++++++++++++++++++	Err	bitreich.org	70
i  A test/random-ics.awk                 |      40 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i	Err	bitreich.org	70
i8 files changed, 94 insertions(+), 57 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/ics2tsv.c b/ics2tsv.c	/scm/ics2txt/file/ics2tsv.c.gph	bitreich.org	70
i@@ -1,4 +1,5 @@	Err	bitreich.org	70
i #include <stdio.h>	Err	bitreich.org	70
i+#include <stdlib.h>	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #include "ical.h"	Err	bitreich.org	70
i #include "log.h"	Err	bitreich.org	70
i@@ -8,17 +9,19 @@ int	Err	bitreich.org	70
i print_ical_to_tsv(FILE *fp)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         struct ical_contentline contentline;	Err	bitreich.org	70
i-        char *line = NULL;	Err	bitreich.org	70
i+        char *line = NULL, *ln = NULL;	Err	bitreich.org	70
i         size_t sz = 0;	Err	bitreich.org	70
i         ssize_t r;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         ical_init_contentline(&contentline);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        while ((r = ical_read_line(&line, &sz, fp)) > 0) {	Err	bitreich.org	70
i+        while ((r = ical_read_line(&line, &ln, &sz, fp)) > 0) {	Err	bitreich.org	70
i                 debug("readling line \"%s\"", line);	Err	bitreich.org	70
i                 if (ical_parse_contentline(&contentline, line) < 0)	Err	bitreich.org	70
i                         die("parsing line \"%s\"", line);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i+        free(line);	Err	bitreich.org	70
i+        free(ln);	Err	bitreich.org	70
i         return r;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
1diff --git a/src/ical.c b/src/ical.c	/scm/ics2txt/file/src/ical.c.gph	bitreich.org	70
i@@ -8,38 +8,28 @@	Err	bitreich.org	70
i #include "util.h"	Err	bitreich.org	70
i 	Err	bitreich.org	70
i int	Err	bitreich.org	70
i-ical_read_line(char **line, size_t *sz, FILE *fp)	Err	bitreich.org	70
i+ical_read_line(char **line, char **ln, size_t *sz, FILE *fp)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        ssize_t r;	Err	bitreich.org	70
i-        char *tail = NULL;	Err	bitreich.org	70
i-        size_t tail_sz = 0;	Err	bitreich.org	70
i-        int c, ret = -1;	Err	bitreich.org	70
i+        int c;	Err	bitreich.org	70
i+        void *v;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        if ((r = getline(line, sz, fp)) <= 0)	Err	bitreich.org	70
i-                return r;	Err	bitreich.org	70
i-        strchomp(*line);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        for (;;) {	Err	bitreich.org	70
i-                if ((c = fgetc(fp)) == EOF) {	Err	bitreich.org	70
i-                        ret = ferror(fp) ? -1 : 0;	Err	bitreich.org	70
i-                        goto end;	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-                if (c != ' ')	Err	bitreich.org	70
i-                        break;	Err	bitreich.org	70
i-                if ((r = getline(&tail, &tail_sz, fp)) <= 0) {	Err	bitreich.org	70
i-                        ret = r;	Err	bitreich.org	70
i-                        goto end;	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-                strchomp(tail);	Err	bitreich.org	70
i-                if (strappend(line, tail) < 0)	Err	bitreich.org	70
i-                        goto end;	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i+        if ((v = realloc(*line, 1)) == NULL)	Err	bitreich.org	70
i+                return -1;	Err	bitreich.org	70
i+        *line = v;	Err	bitreich.org	70
i+        (*line)[0] = '\0';	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        do {	Err	bitreich.org	70
i+                if (getline(ln, sz, fp) <= 0)	Err	bitreich.org	70
i+                        return ferror(fp) ? -1 : 0;	Err	bitreich.org	70
i+                strchomp(*ln);	Err	bitreich.org	70
i+                if (strappend(line, *ln) < 0)	Err	bitreich.org	70
i+                        return -1;	Err	bitreich.org	70
i+                if ((c = fgetc(fp)) == EOF)	Err	bitreich.org	70
i+                        return ferror(fp) ? -1 : 1;	Err	bitreich.org	70
i+        } while (c == ' ');	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        ret = 1;	Err	bitreich.org	70
i-end:	Err	bitreich.org	70
i-        free(tail);	Err	bitreich.org	70
i         ungetc(c, fp);	Err	bitreich.org	70
i-        return ret;	Err	bitreich.org	70
i+        return 1;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i int	Err	bitreich.org	70
i@@ -48,48 +38,26 @@ ical_parse_contentline(struct ical_contentline *contentline, char *line)	Err	bitreich.org	70
i         char *column, *equal, *param, *cp;	Err	bitreich.org	70
i         size_t sz;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        debug("0");	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         if ((column = strchr(line, ':')) == NULL)	Err	bitreich.org	70
i                 return -1;	Err	bitreich.org	70
i         *column = '\0';	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        {	Err	bitreich.org	70
i-                size_t len;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-                debug("1.1");	Err	bitreich.org	70
i-                len = strlen(column + 1);	Err	bitreich.org	70
i-                debug("1.2");	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-        	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         if ((contentline->value = strdup(column + 1)) == NULL)	Err	bitreich.org	70
i                 return -1;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        debug("2");	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        cp = strchr(line, ';');	Err	bitreich.org	70
i-        cp = (cp == NULL) ? (NULL) : (cp + 1);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        debug("3");	Err	bitreich.org	70
i-	Err	bitreich.org	70
i+        if ((cp = strchr(line, ';')) != NULL)	Err	bitreich.org	70
i+                cp++;	Err	bitreich.org	70
i         while ((param = strsep(&cp, ";")) != NULL) {	Err	bitreich.org	70
i                 if ((equal = strchr(param, '=')) == NULL)	Err	bitreich.org	70
i                         return -1;	Err	bitreich.org	70
i                 *equal = '\0';	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 if (map_set(&contentline->param, param, equal + 1) < 0)	Err	bitreich.org	70
i                         return -1;	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        debug("4");	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         sz = sizeof(contentline->name);	Err	bitreich.org	70
i         if (strlcpy(contentline->name, line, sz) >= sz)	Err	bitreich.org	70
i                 return errno=EMSGSIZE, -1;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        debug("5");	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         return 0;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
1diff --git a/src/ical.h b/src/ical.h	/scm/ics2txt/file/src/ical.h.gph	bitreich.org	70
i@@ -17,7 +17,7 @@ struct ical_contentline {	Err	bitreich.org	70
i };	Err	bitreich.org	70
i 	Err	bitreich.org	70
i /** src/ical.c **/	Err	bitreich.org	70
i-int ical_read_line(char **line, size_t *sz, FILE *fp);	Err	bitreich.org	70
i+int ical_read_line(char **line, char **ln, size_t *sz, FILE *fp);	Err	bitreich.org	70
i int ical_parse_contentline(struct ical_contentline *contentline, char *line);	Err	bitreich.org	70
i void ical_init_contentline(struct ical_contentline *contentline);	Err	bitreich.org	70
i void ical_free_contentline(struct ical_contentline *contentline);	Err	bitreich.org	70
1diff --git a/src/map.c b/src/map.c	/scm/ics2txt/file/src/map.c.gph	bitreich.org	70
i@@ -87,6 +87,12 @@ map_del(struct map *map, char *key)	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i+map_init(struct map *map)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        memset(map, 0, sizeof(*map));	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+void	Err	bitreich.org	70
i map_free_values(struct map *map)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         for (size_t i = 0; i < map->len; i++)	Err	bitreich.org	70
1diff --git a/src/map.h b/src/map.h	/scm/ics2txt/file/src/map.h.gph	bitreich.org	70
i@@ -17,6 +17,7 @@ struct map {	Err	bitreich.org	70
i void * map_get(struct map *map, char *key);	Err	bitreich.org	70
i int map_set(struct map *map, char *key, void *value);	Err	bitreich.org	70
i int map_del(struct map *map, char *key);	Err	bitreich.org	70
i+void map_init(struct map *map);	Err	bitreich.org	70
i void map_free_values(struct map *map);	Err	bitreich.org	70
i void map_free(struct map *map);	Err	bitreich.org	70
i 	Err	bitreich.org	70
1diff --git a/src/util.c b/src/util.c	/scm/ics2txt/file/src/util.c.gph	bitreich.org	70
i@@ -10,7 +10,8 @@ strlcpy(char *buf, char const *str, size_t sz)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         size_t len, cpy;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        cpy = ((len = strlen(str)) > sz) ? (sz) : (len);	Err	bitreich.org	70
i+        len = strlen(str);	Err	bitreich.org	70
i+        cpy = (len > sz) ? (sz) : (len);	Err	bitreich.org	70
i         memcpy(buf, str, cpy + 1);	Err	bitreich.org	70
i         buf[sz - 1] = '\0';	Err	bitreich.org	70
i         return len;	Err	bitreich.org	70
i@@ -54,7 +55,7 @@ strappend(char **base_p, char const *s)	Err	bitreich.org	70
i         size_t base_len, s_len;	Err	bitreich.org	70
i         void *v;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        base_len = strlen(*base_p);	Err	bitreich.org	70
i+        base_len = (*base_p == NULL) ? (0) : (strlen(*base_p));	Err	bitreich.org	70
i         s_len = strlen(s);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         if ((v = realloc(*base_p, base_len + s_len + 1)) == NULL)	Err	bitreich.org	70
1diff --git a/test/map.c b/test/map.c	/scm/ics2txt/file/test/map.c.gph	bitreich.org	70
i@@ -0,0 +1,18 @@	Err	bitreich.org	70
i+#include <string.h>	Err	bitreich.org	70
i+#include <stdio.h>	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#include "map.h"	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+int main(int argc, char **argv) {	Err	bitreich.org	70
i+        struct map map;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        memset(&map, 0, sizeof(map));	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (argv++; *argv != NULL; argv++)	Err	bitreich.org	70
i+                if (map_set(&map, *argv, "abra") < 0)	Err	bitreich.org	70
i+                        return 1;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        fprintf(stdout, ".");	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        return 0;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
1diff --git a/test/random-ics.awk b/test/random-ics.awk	/scm/ics2txt/file/test/random-ics.awk.gph	bitreich.org	70
i@@ -0,0 +1,40 @@	Err	bitreich.org	70
i+#!/usr/bin/awk -f	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+function random(n) {	Err	bitreich.org	70
i+        "exec od -An </dev/urandom" | getline num	Err	bitreich.org	70
i+        return num % n	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+BEGIN {	Err	bitreich.org	70
i+        data = "exec tr -cd -- '-a-zA-Z0-9\n' </dev/urandom"	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        first = 1	Err	bitreich.org	70
i+        while (data | getline) {	Err	bitreich.org	70
i+                if (random(2) && !first) {	Err	bitreich.org	70
i+                        print(" " $0)	Err	bitreich.org	70
i+                        continue	Err	bitreich.org	70
i+                }	Err	bitreich.org	70
i+                first = 0	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+                col = random(26) + 1	Err	bitreich.org	70
i+                out = substr($0, 1, col)	Err	bitreich.org	70
i+                $0 = substr($0, col + 1)	Err	bitreich.org	70
i+                n = random(30)	Err	bitreich.org	70
i+                for (i = 0; i <= n; i++) {	Err	bitreich.org	70
i+                        col = random(30) + 5	Err	bitreich.org	70
i+                        if (length($0) < col)	Err	bitreich.org	70
i+                                continue	Err	bitreich.org	70
i+                        eq = random(int(col / 2)) + 1	Err	bitreich.org	70
i+                        out = out substr($0, 1, eq) "=" substr($1, eq + 1, col) ";"	Err	bitreich.org	70
i+                        $0 = substr($0, col + 1)	Err	bitreich.org	70
i+                }	Err	bitreich.org	70
i+                out = out $0 ":"	Err	bitreich.org	70
i+                data | getline	Err	bitreich.org	70
i+                out = out $0	Err	bitreich.org	70
i+                if (out ~ "\n" || out !~ ":")	Err	bitreich.org	70
i+                        exit(1)	Err	bitreich.org	70
i+                print(out)	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        close(cmd)	Err	bitreich.org	70
i+}	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/ics2txt/commit/a7b4ceeaf4a574...
Content-Typetext/plain; charset=utf-8