HTRACE-224. htrace C client: htrace_conf_get_u64, htrace_conf_get_double can't handle spaces at the end of strings (cmccabe)
diff --git a/htrace-c/src/core/conf.c b/htrace-c/src/core/conf.c
index 08fbb8c..c004fad 100644
--- a/htrace-c/src/core/conf.c
+++ b/htrace-c/src/core/conf.c
@@ -178,11 +178,12 @@
         if (c == '\0') {
             break;
         }
-        if ((c != ' ') || (c != '\t')) {
+        if (!((c == ' ') || (c == '\t'))) {
             htrace_log(log, "error parsing %s for %s: garbage at end "
                        "of string.\n", in, key);
             return 0;
         }
+        endptr++;
     }
     *out = ret;
     return 1;
@@ -229,11 +230,12 @@
         if (c == '\0') {
             break;
         }
-        if ((c != ' ') || (c != '\t')) {
+        if (!((c == ' ') || (c == '\t'))) {
             htrace_log(log, "error parsing %s for %s: garbage at end "
                        "of string.\n", in, key);
             return 0;
         }
+        endptr++;
     }
     *out = ret;
     return 1;
diff --git a/htrace-c/src/test/conf-unit.c b/htrace-c/src/test/conf-unit.c
index debc866..715141f 100644
--- a/htrace-c/src/test/conf-unit.c
+++ b/htrace-c/src/test/conf-unit.c
@@ -29,7 +29,9 @@
 {
     struct htrace_conf *conf;
     struct htrace_log *lg;
-    conf = htrace_conf_from_strs("foo=bar;foo2=baz;foo3=quux;foo5=123",
+    conf = htrace_conf_from_strs("foo=bar;foo2=baz;foo3=quux;foo5=123;"
+                                 "garbage.at.end=1234garbage;"
+                                 "whitespace.at.end=123\t \t",
                                  "foo3=default3;foo4=default4");
     lg = htrace_log_alloc(conf);
     EXPECT_NONNULL(conf);
@@ -39,6 +41,8 @@
     EXPECT_UINT64_EQ((uint64_t)123, htrace_conf_get_u64(lg, conf, "foo5"));
     EXPECT_UINT64_EQ((uint64_t)123, htrace_conf_get_u64(lg, conf, "foo5"));
     EXPECT_NULL(htrace_conf_get(conf, "unknown"));
+    EXPECT_UINT64_EQ((uint64_t)0, htrace_conf_get_u64(lg, conf, "garbage.at.end"));
+    EXPECT_UINT64_EQ((uint64_t)123, htrace_conf_get_u64(lg, conf, "whitespace.at.end"));
 
     htrace_log_free(lg);
     htrace_conf_free(conf);
@@ -51,7 +55,9 @@
     struct htrace_log *lg;
     double d;
 
-    conf = htrace_conf_from_strs("my.double=5.4;bozo=wakkawakkaa",
+    conf = htrace_conf_from_strs("my.double=5.4;bozo=wakkawakkaa;"
+                                 "garbage.at.end=1.0garbage;"
+                                 "tabs.at.end=5.0\t\t",
                                  "my.double=1.1;bozo=2.0");
     EXPECT_NONNULL(conf);
     lg = htrace_log_alloc(conf);
@@ -78,6 +84,18 @@
                    "got %g\n", d);
         return EXIT_FAILURE;
     }
+    d = htrace_conf_get_double(lg, conf, "garbage.at.end");
+    if ((d > 0.001) || (d < -0.001)) {
+        htrace_log(lg, "failed to parse garbage.at.end... expected 0.0, "
+                   "got %g\n", d);
+        return EXIT_FAILURE;
+    }
+    d = htrace_conf_get_double(lg, conf, "tabs.at.end");
+    if ((d > 5.001) || (d < 4.990)) {
+        htrace_log(lg, "failed to parse tabs.at.end... expected 5.0, "
+                   "got %g\n", d);
+        return EXIT_FAILURE;
+    }
 
     htrace_log_free(lg);
     htrace_conf_free(conf);