From 30db9e7dd0d149cba3a4038bb5d79db9339c16c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 25 Apr 2021 12:05:28 +0200 Subject: [PATCH] trim strings from language metadata --- Source/utils/language.cpp | 40 +++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/Source/utils/language.cpp b/Source/utils/language.cpp index 7846aadda..e31e24dae 100644 --- a/Source/utils/language.cpp +++ b/Source/utils/language.cpp @@ -34,24 +34,48 @@ struct mo_entry { uint32_t offset; }; +char *strtrim_left(char *s) +{ + while (*s && isblank(*s)) { + s++; + } + return s; +} + +char *strtrim_right(char *s) +{ + size_t length = strlen(s); + + while (length) { + length--; + if (isblank(s[length])) { + s[length] = '\0'; + } else { + break; + } + } + return s; +} + void parse_metadata(char *data) { char *key, *delim, *val; char *ptr = data; - while (ptr) { - if (!(delim = strstr(ptr, ":"))) { - return; - } - key = data; - val = delim + 1; + while (ptr && (delim = strstr(ptr, ":"))) { + key = strtrim_left(ptr); + val = strtrim_left(delim + 1); - // add null termination to key and val + // null-terminate key *delim = '\0'; - if ((ptr = strstr(ptr, "\n"))) { + + // progress to next line (if any) + if ((ptr = strstr(val, "\n"))) { *ptr = '\0'; ptr++; } + + val = strtrim_right(val); meta[key] = val; } }