From 857202dc700218a67a27feae51e58a90a134ced9 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 28 Dec 2011 12:48:44 +0000 Subject: Escape all strings stored in files --- src/loadsave.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- src/loadsave.h | 3 ++ src/notes.c | 82 ++--------------------------------------------------- 3 files changed, 92 insertions(+), 82 deletions(-) diff --git a/src/loadsave.c b/src/loadsave.c index 654b4e4..477cd2d 100644 --- a/src/loadsave.c +++ b/src/loadsave.c @@ -377,6 +377,80 @@ static void free_ds_tree(struct ds_node *root) } +char *escape_text(const char *a) +{ + char *b; + size_t l1, l, i; + + l1 = strlen(a); + + b = malloc(2*l1 + 1); + l = 0; + + for ( i=0; ivalue+s1+1, s2-s1-1); v[s2-s1-1] = '\0'; - *val = v; + *val = unescape_text(v); + free(v); return 0; } @@ -792,8 +867,18 @@ static void check_prefix_output(struct serializer *ser) void serialize_s(struct serializer *ser, const char *key, const char *val) { + char *n; + + n = escape_text(val); + if ( n == NULL ) { + fprintf(stderr, "Failed to escape '%s'\n", val); + return; + } + check_prefix_output(ser); - fprintf(ser->fh, "%s = \"%s\"\n", key, val); + fprintf(ser->fh, "%s = \"%s\"\n", key, n); + + free(n); } diff --git a/src/loadsave.h b/src/loadsave.h index 09226d3..14fb6ff 100644 --- a/src/loadsave.h +++ b/src/loadsave.h @@ -53,6 +53,9 @@ struct serializer extern void show_tree(struct ds_node *root, const char *path); +extern char *escape_text(const char *a); +extern char *unescape_text(const char *a); + extern void serialize_start(struct serializer *s, const char *id); extern void serialize_s(struct serializer *s, const char *key, const char *val); extern void serialize_f(struct serializer *s, const char *key, double val); diff --git a/src/notes.c b/src/notes.c index 71a6b1a..270f753 100644 --- a/src/notes.c +++ b/src/notes.c @@ -97,86 +97,9 @@ static gint close_notes_sig(GtkWidget *w, struct presentation *p) } -static char *escape_text(const char *a) -{ - char *b; - size_t l1, l, i; - - l1 = strlen(a); - - b = malloc(2*l1 + 1); - l = 0; - - for ( i=0; inotes); - serialize_s(ser, "notes", es); - free(es); + serialize_s(ser, "notes", s->notes); } @@ -186,8 +109,7 @@ void load_notes(struct ds_node *node, struct slide *s) if ( get_field_s(node, "notes", &v) ) return; - s->notes = unescape_text(v); - free(v); + s->notes = v; } -- cgit v1.2.3