From 1bb3f2601e862b72cbc6c6dabf515ad9f2f6ad1e Mon Sep 17 00:00:00 2001 From: jobol Date: Tue, 3 Apr 2018 15:10:28 +0200 Subject: [PATCH] afm-udb: refactor add_fields_of_content Change-Id: Id59c92e18c7d3ed3fdd0df6dc2d46f64d58bdeee Signed-off-by: jobol --- src/afm-udb.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/afm-udb.c b/src/afm-udb.c index 638387e..7f4a16e 100644 --- a/src/afm-udb.c +++ b/src/afm-udb.c @@ -182,17 +182,25 @@ static int add_fields_of_content( { char *name, *value, *read, *write; - read = strstr(content, x_afm_prefix); - while (read) { + /* start at the beginning */ + read = content; + for (;;) { + /* search the next key */ + read = strstr(read, x_afm_prefix); + if (!read) + return 0; + + /* search to equal */ name = read + x_afm_prefix_length; value = strchr(name, '='); if (value == NULL) - read = strstr(name, x_afm_prefix); + read = name; /* not found */ else { + /* get the value (translate it) */ *value++ = 0; read = write = value; while(*read && *read != '\n') { - if (read[0] != '\\') + if (*read != '\\') *write++ = *read++; else { switch(*++read) { @@ -203,13 +211,14 @@ static int add_fields_of_content( read += !!*read; } } - read = strstr(read, x_afm_prefix); + read += !!*read; *write = 0; + + /* add the found field now */ if (add_field(priv, pub, name, value) < 0) return -1; } } - return 0; } /* -- 2.16.6