From 6b10fdf08ce0cd183e6c09f6783a3075a7dac632 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 3 Jun 2020 11:54:24 +0200 Subject: Less circuitous string lexxing in geometry parser --- libcrystfel/src/datatemplate.c | 100 ++++++++++++++++++++++------------------- 1 file changed, 53 insertions(+), 47 deletions(-) diff --git a/libcrystfel/src/datatemplate.c b/libcrystfel/src/datatemplate.c index 0e803f87..f996c99b 100644 --- a/libcrystfel/src/datatemplate.c +++ b/libcrystfel/src/datatemplate.c @@ -777,16 +777,14 @@ DataTemplate *data_template_new_from_string(const char *string_in) do { - int n1, n2; - char **path; char *line; struct dt_badregion *badregion = NULL; struct panel_template *panel = NULL; - char wholeval[1024]; + /* Copy the next line from the big string */ const char *nl = strchr(string, '\n'); if ( nl != NULL ) { - size_t len = nl - string; + size_t len = nl - string; line = strndup(string, nl-string); line[len] = '\0'; string += len+1; @@ -795,76 +793,84 @@ DataTemplate *data_template_new_from_string(const char *string_in) done = 1; } - if ( line[0] == ';' ) { + /* Trim leading spaces */ + i = 0; + char *line_orig = line; + while ( (line_orig[i] == ' ') + || (line_orig[i] == '\t') ) i++; + line = strdup(line+i); + free(line_orig); + + /* Stop at comment symbol */ + char *comm = strchr(line, ';'); + if ( comm != NULL ) comm[0] = '\0'; + + /* Nothing left? Entire line was commented out, + * and can be silently ignored */ + if ( line[0] == '\0' ) { free(line); continue; } - n1 = assplode(line, " \t", &bits, ASSPLODE_NONE); - if ( n1 < 3 ) { - for ( i=0; i