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