From d024bc27cee40f21e6a3841266062408c44e56fb Mon Sep 17 00:00:00 2001 From: Martin Sehnoutka Date: Wed, 7 Sep 2016 10:35:54 +0200 Subject: [PATCH 09/33] Trim whitespaces when reading configuration. --- parseconf.c | 2 +- str.c | 12 ++++++++++++ str.h | 1 + sysutil.c | 12 ++++++++++++ sysutil.h | 1 + 5 files changed, 27 insertions(+), 1 deletion(-) diff --git a/parseconf.c b/parseconf.c index 385afd2..30df598 100644 --- a/parseconf.c +++ b/parseconf.c @@ -280,7 +280,7 @@ vsf_parseconf_load_setting(const char* p_setting, int errs_fatal) } else { - *p_curr_setting = str_strdup(&s_value_str); + *p_curr_setting = str_strdup_trimmed(&s_value_str); } return; } diff --git a/str.c b/str.c index ba4b92a..41b27db 100644 --- a/str.c +++ b/str.c @@ -104,6 +104,18 @@ str_strdup(const struct mystr* p_str) return vsf_sysutil_strdup(str_getbuf(p_str)); } +const char* +str_strdup_trimmed(const struct mystr* p_str) +{ + const char* p_trimmed = str_getbuf(p_str); + int h, t, newlen; + + for (h = 0; h < (int)str_getlen(p_str) && vsf_sysutil_isspace(p_trimmed[h]); h++) ; + for (t = str_getlen(p_str) - 1; t >= 0 && vsf_sysutil_isspace(p_trimmed[t]); t--) ; + newlen = t - h + 1; + return newlen ? vsf_sysutil_strndup(p_trimmed+h, (unsigned int)newlen) : 0L; +} + void str_alloc_alt_term(struct mystr* p_str, const char* p_src, char term) { diff --git a/str.h b/str.h index 3a21b50..44270da 100644 --- a/str.h +++ b/str.h @@ -31,6 +31,7 @@ void str_alloc_ulong(struct mystr* p_str, unsigned long the_ulong); void str_alloc_filesize_t(struct mystr* p_str, filesize_t the_filesize); void str_copy(struct mystr* p_dest, const struct mystr* p_src); const char* str_strdup(const struct mystr* p_str); +const char* str_strdup_trimmed(const struct mystr* p_str); void str_empty(struct mystr* p_str); void str_free(struct mystr* p_str); void str_trunc(struct mystr* p_str, unsigned int trunc_len); diff --git a/sysutil.c b/sysutil.c index 5cdb6ef..428a34a 100644 --- a/sysutil.c +++ b/sysutil.c @@ -1035,6 +1035,18 @@ vsf_sysutil_strdup(const char* p_str) return strdup(p_str); } +char* +vsf_sysutil_strndup(const char* p_str, unsigned int p_len) +{ + char *new = (char *)malloc(p_len+1); + + if (new == NULL) + return NULL; + + new[p_len]='\0'; + return (char *)memcpy(new, p_str, p_len); +} + void vsf_sysutil_memclr(void* p_dest, unsigned int size) { diff --git a/sysutil.h b/sysutil.h index c34778c..c2ddd15 100644 --- a/sysutil.h +++ b/sysutil.h @@ -186,6 +186,7 @@ int vsf_sysutil_wait_get_exitcode( /* Various string functions */ unsigned int vsf_sysutil_strlen(const char* p_text); char* vsf_sysutil_strdup(const char* p_str); +char* vsf_sysutil_strndup(const char* p_str, unsigned int p_len); void vsf_sysutil_memclr(void* p_dest, unsigned int size); void vsf_sysutil_memcpy(void* p_dest, const void* p_src, const unsigned int size); -- 2.7.4