<div dir="ltr">Any comments?<br><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jul 31, 2013 at 7:52 PM, Balazs Scheidler <span dir="ltr">&lt;<a href="mailto:bazsi@balabit.hu" target="_blank">bazsi@balabit.hu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Hi,<br>
<br>
I&#39;ve received your patch via the merge-queue/3.5 branch:<br>
<br>
&gt;     There are a number of cases in the configuration where one needs to set<br>
&gt;     a size (think buffer sizes), and counting zeroes is extremely annoying<br>
&gt;     and unintuitive. For this reason, we introduce number unit suffixes for<br>
&gt;     kilo-, mega- and giga-: K, M, G, respectively (case-insensitive,<br>
&gt;     optionally followed by a &#39;b&#39; or &#39;B&#39;, for byte).<br>
&gt;<br>
&gt;     Anywhere where you can specify a number, you&#39;ll be able to specify one<br>
&gt;     with a unit suffix from now on:<br>
&gt;<br>
&gt;      log-fifo-size(200M)<br>
&gt;<br>
&gt;     A function to parse longs already existed in basic-funcs (tf_parse_int),<br>
&gt;     which was moved to lib/misc.c now, and enhanced to recognise the unit<br>
&gt;     suffixes too.<br>
&gt;<br>
&gt;     This also closes #28.<br>
&gt;<br>
&gt;     Signed-off-by: Gergely Nagy &lt;<a href="mailto:algernon@balabit.hu">algernon@balabit.hu</a>&gt;<br>
&gt;<br>
<br>
I really like the change as it definitely seems useful, however I&#39;d have some things<br>
I&#39;d like changed, and I&#39;ve coded this up in a branch named numeric-suffixes.<br>
<br>
Could you please fold the patches and resubmit them?<br>
<br>
Thanks.<br>
<br>
This is the patch I had in mind<br>
<br>
commit 3fb2cfbbefe5b3d8f2952e807aa40a7b207a7a68<br>
Author: Balazs Scheidler &lt;<a href="mailto:bazsi@balabit.hu">bazsi@balabit.hu</a>&gt;<br>
Date:   Tue Jul 30 16:37:31 2013 +0200<br>
<br>
    parse-number: follow up patch to number-units functionality<br>
<br>
    This patch improves the patch series in a number of ways:<br>
      - moves the number parsing to its separate module<br>
      - removes the conflicting rule from the lexer, which would never match<br>
      - accepts &#39;i&#39; modifier in suffixes to indicate base2 units<br>
      - string related functions don&#39;t get the suffixes functionality<br>
      - extends the test suite, and adds test functions to indicate the intent<br>
        of various asserts<br>
      - test-num-parse is moved under lib/tests<br>
<br>
    This patch should be folded back into the base set before integration.<br>
<br>
diff --git a/lib/Makefile.am b/lib/Makefile.am<br>
index d16f755..44ee107 100644<br>
--- a/lib/Makefile.am<br>
+++ b/lib/Makefile.am<br>
@@ -62,6 +62,7 @@ pkginclude_HEADERS                    += \<br>
        lib/ml-batched-timer.h          \<br>
        lib/msg-format.h                \<br>
        lib/nvtable.h                   \<br>
+       lib/parse-number.h              \<br>
        lib/persist-state.h             \<br>
        lib/plugin.h                    \<br>
        lib/plugin-types.h              \<br>
@@ -135,6 +136,7 @@ lib_libsyslog_ng_la_SOURCES         = \<br>
        lib/ml-batched-timer.c          \<br>
        lib/msg-format.c                \<br>
        lib/nvtable.c                   \<br>
+       lib/parse-number.c              \<br>
        lib/persist-state.c             \<br>
        lib/plugin.c                    \<br>
        lib/pragma-parser.c             \<br>
diff --git a/lib/cfg-lex.l b/lib/cfg-lex.l<br>
index ed61c6f..b923a7c 100644<br>
--- a/lib/cfg-lex.l<br>
+++ b/lib/cfg-lex.l<br>
@@ -27,7 +27,7 @@<br>
 #include &quot;cfg-lexer.h&quot;<br>
 #include &quot;cfg-grammar.h&quot;<br>
 #include &quot;messages.h&quot;<br>
-#include &quot;misc.h&quot;<br>
+#include &quot;parse-number.h&quot;<br>
<br>
 #include &lt;string.h&gt;<br>
 #include &lt;strings.h&gt;<br>
@@ -160,14 +160,13 @@ word      [^ \#&#39;&quot;\(\)\{\}\\;\n\t,|\.@:]<br>
 (-|\+)?{digit}+\.{digit}+  { yylval-&gt;fnum = strtod(yytext, NULL); return LL_FLOAT; }<br>
 0x{xdigit}+               { yylval-&gt;num = strtoll(yytext + 2, NULL, 16); return LL_NUMBER; }<br>
 0{odigit}+                { yylval-&gt;num = strtoll(yytext + 1, NULL, 8); return LL_NUMBER; }<br>
-(-|\+)?{digit}+(M|m|G|g|k|K)?(b|B)? {<br>
-                             if (!num_parse_int(yytext, &amp;yylval-&gt;num))<br>
+(-|\+)?{digit}+(M|m|G|g|k|K)?(i|I)?(b|B)? {<br>
+                             if (!parse_number_with_suffix(yytext, &amp;yylval-&gt;num))<br>
                                {<br>
                                  YY_FATAL_ERROR(&quot;Invalid number specification&quot;);<br>
                                }<br>
                              return LL_NUMBER;<br>
                            }<br>
-(-|\+)?{digit}+            { yylval-&gt;num = strtoll(yytext, NULL, 10); return LL_NUMBER; }<br>
 ({word}+(\.)?)*{word}+            { return cfg_lexer_lookup_keyword(yyextra, yylval, yylloc, yytext); }<br>
 \(                        |<br>
 \)                        |<br>
diff --git a/lib/misc.c b/lib/misc.c<br>
index 2d95c78..7a5fad6 100644<br>
--- a/lib/misc.c<br>
+++ b/lib/misc.c<br>
@@ -635,48 +635,3 @@ utf8_escape_string(const gchar *str, gssize len)<br>
<br>
   return res;<br>
 }<br>
-<br>
-gboolean<br>
-num_parse_int(const gchar *s, long *d)<br>
-{<br>
-  gchar *endptr;<br>
-  glong val;<br>
-<br>
-  errno = 0;<br>
-  val = strtoll(s, &amp;endptr, 10);<br>
-<br>
-  if ((errno == ERANGE &amp;&amp; (val == LONG_MAX || val == LONG_MIN))<br>
-      || (errno != 0 &amp;&amp; val == 0))<br>
-    return FALSE;<br>
-<br>
-  if (endptr == s)<br>
-    return FALSE;<br>
-<br>
-  switch (*endptr)<br>
-    {<br>
-    case &#39;G&#39;:<br>
-    case &#39;g&#39;:<br>
-      val *= 1000;<br>
-    case &#39;m&#39;:<br>
-    case &#39;M&#39;:<br>
-      val *= 1000;<br>
-    case &#39;K&#39;:<br>
-    case &#39;k&#39;:<br>
-      val *= 1000;<br>
-      endptr++;<br>
-      break;<br>
-    case &#39;\0&#39;:<br>
-      break;<br>
-    default:<br>
-      return FALSE;<br>
-    }<br>
-<br>
-  if (*endptr == &#39;b&#39; || *endptr == &#39;B&#39;)<br>
-    endptr++;<br>
-<br>
-  if (*endptr != &#39;\0&#39;)<br>
-    return FALSE;<br>
-<br>
-  *d = val;<br>
-  return TRUE;<br>
-}<br>
diff --git a/lib/parse-number.c b/lib/parse-number.c<br>
new file mode 100644<br>
index 0000000..b9b1be5<br>
--- /dev/null<br>
+++ b/lib/parse-number.c<br>
@@ -0,0 +1,161 @@<br>
+#include &quot;parse-number.h&quot;<br>
+<br>
+#include &lt;string.h&gt;<br>
+#include &lt;errno.h&gt;<br>
+#include &lt;stdlib.h&gt;<br>
+<br>
+static gboolean<br>
+_valid_unit(const gchar unit_char)<br>
+{<br>
+  return (unit_char == &#39;B&#39; || unit_char == &#39;b&#39;);<br>
+}<br>
+<br>
+static gboolean<br>
+_valid_exponent(const gchar exponent_char)<br>
+{<br>
+  gchar e = exponent_char;<br>
+<br>
+  return e == &#39;k&#39; || e == &#39;K&#39; ||<br>
+         e == &#39;m&#39; || e == &#39;M&#39; ||<br>
+         e == &#39;g&#39; || e == &#39;G&#39;;<br>
+}<br>
+<br>
+static gboolean<br>
+_parse_suffix(const gchar *suffix, gchar *exponent_char, gchar *base_char, gchar *unit_char)<br>
+{<br>
+  gint suffix_len;<br>
+<br>
+  suffix_len = strlen(suffix);<br>
+  if (suffix_len &gt; 3)<br>
+    return FALSE;<br>
+  if (suffix_len == 0)<br>
+    return TRUE;<br>
+<br>
+  if (suffix_len == 3)<br>
+    {<br>
+      *exponent_char = suffix[0];<br>
+      *base_char = suffix[1];<br>
+      *unit_char = suffix[2];<br>
+    }<br>
+  else if (suffix_len == 2)<br>
+    {<br>
+      *exponent_char = suffix[0];<br>
+      if (_valid_unit(suffix[1]))<br>
+        *unit_char = suffix[1];<br>
+      else<br>
+        *base_char = suffix[1];<br>
+    }<br>
+  else if (suffix_len == 1)<br>
+    {<br>
+      if (_valid_exponent(suffix[0]))<br>
+        *exponent_char = suffix[0];<br>
+      else if (_valid_unit(suffix[0]))<br>
+        *unit_char = suffix[0];<br>
+      else<br>
+        return FALSE;<br>
+    }<br>
+  return TRUE;<br>
+}<br>
+<br>
+static gboolean<br>
+_determine_multiplier(gchar base_char, glong *multiplier)<br>
+{<br>
+  if (base_char == 0)<br>
+    *multiplier = 1000;<br>
+  else if (base_char == &#39;I&#39; || base_char == &#39;i&#39;)<br>
+    *multiplier = 1024;<br>
+  else<br>
+    return FALSE;<br>
+  return TRUE;<br>
+}<br>
+<br>
+static gboolean<br>
+_validate_unit(gchar unit_char)<br>
+{<br>
+  if (unit_char &amp;&amp; !_valid_unit(unit_char))<br>
+    return FALSE;<br>
+  return TRUE;<br>
+}<br>
+<br>
+static gboolean<br>
+_process_exponent(gchar exponent_char, glong *d, glong multiplier)<br>
+{<br>
+  switch (exponent_char)<br>
+    {<br>
+    case &#39;G&#39;:<br>
+    case &#39;g&#39;:<br>
+      (*d) *= multiplier;<br>
+    case &#39;m&#39;:<br>
+    case &#39;M&#39;:<br>
+      (*d) *= multiplier;<br>
+    case &#39;K&#39;:<br>
+    case &#39;k&#39;:<br>
+      (*d) *= multiplier;<br>
+    case 0:<br>
+      return TRUE;<br>
+    default:<br>
+      return FALSE;<br>
+    }<br>
+}<br>
+<br>
+static gboolean<br>
+_process_suffix(const gchar *suffix, glong *d)<br>
+{<br>
+  gchar exponent_char = 0, base_char = 0, unit_char = 0;<br>
+  glong multiplier = 0;<br>
+<br>
+  if (!_parse_suffix(suffix, &amp;exponent_char, &amp;base_char, &amp;unit_char))<br>
+    return FALSE;<br>
+<br>
+  if (!_determine_multiplier(base_char, &amp;multiplier))<br>
+    return FALSE;<br>
+<br>
+  if (!_validate_unit(unit_char))<br>
+    return FALSE;<br>
+<br>
+  if (!_process_exponent(exponent_char, d, multiplier))<br>
+    return FALSE;<br>
+<br>
+  return TRUE;<br>
+}<br>
+<br>
+static gboolean<br>
+_parse_number(const gchar *s, gchar **endptr, long *d)<br>
+{<br>
+  glong val;<br>
+<br>
+  errno = 0;<br>
+  val = strtoll(s, endptr, 10);<br>
+<br>
+  if ((errno == ERANGE &amp;&amp; (val == LONG_MAX || val == LONG_MIN))<br>
+      || (errno != 0 &amp;&amp; val == 0))<br>
+    return FALSE;<br>
+<br>
+  if (*endptr == s)<br>
+    return FALSE;<br>
+<br>
+  *d = val;<br>
+  return TRUE;<br>
+}<br>
+<br>
+gboolean<br>
+parse_number(const gchar *s, glong *d)<br>
+{<br>
+  gchar *endptr;<br>
+<br>
+  if (!_parse_number(s, &amp;endptr, d))<br>
+    return FALSE;<br>
+  if (*endptr)<br>
+    return FALSE;<br>
+  return TRUE;<br>
+}<br>
+<br>
+gboolean<br>
+parse_number_with_suffix(const gchar *s, glong *d)<br>
+{<br>
+  gchar *endptr;<br>
+<br>
+  if (!_parse_number(s, &amp;endptr, d))<br>
+    return FALSE;<br>
+  return _process_suffix(endptr, d);<br>
+}<br>
diff --git a/lib/parse-number.h b/lib/parse-number.h<br>
new file mode 100644<br>
index 0000000..e8e0c52<br>
--- /dev/null<br>
+++ b/lib/parse-number.h<br>
@@ -0,0 +1,9 @@<br>
+#ifndef PARSE_NUMBER_H_INCLUDED<br>
+#define PARSE_NUMBER_H_INCLUDED<br>
+<br>
+#include &quot;syslog-ng.h&quot;<br>
+<br>
+gboolean parse_number_with_suffix(const gchar *str, glong *result);<br>
+gboolean parse_number(const gchar *str, glong *result);<br>
+<br>
+#endif<br>
diff --git a/lib/tests/Makefile.am b/lib/tests/Makefile.am<br>
index 7117983..4d88daa 100644<br>
--- a/lib/tests/Makefile.am<br>
+++ b/lib/tests/Makefile.am<br>
@@ -1,4 +1,8 @@<br>
-lib_tests_TESTS                = lib/tests/test_log_message lib/tests/test_cfg_lexer_subst<br>
+lib_tests_TESTS                = \<br>
+       lib/tests/test_log_message      \<br>
+       lib/tests/test_cfg_lexer_subst  \<br>
+       lib/tests/test_parse_number<br>
+<br>
 check_PROGRAMS         += ${lib_tests_TESTS}<br>
<br>
 lib_tests_test_log_message_CFLAGS      =       \<br>
@@ -10,3 +14,8 @@ lib_tests_test_cfg_lexer_subst_CFLAGS =       \<br>
        $(TEST_CFLAGS)<br>
 lib_tests_test_cfg_lexer_subst_LDADD   =       \<br>
        $(TEST_LDADD)<br>
+<br>
+lib_tests_test_parse_number_CFLAGS     =       \<br>
+       $(TEST_CFLAGS)<br>
+lib_tests_test_parse_number_LDADD      =       \<br>
+       $(TEST_LDADD)<br>
diff --git a/lib/tests/test_parse_number.c b/lib/tests/test_parse_number.c<br>
new file mode 100644<br>
index 0000000..5895005<br>
--- /dev/null<br>
+++ b/lib/tests/test_parse_number.c<br>
@@ -0,0 +1,118 @@<br>
+#include &lt;stdlib.h&gt;<br>
+<br>
+#include &quot;testutils.h&quot;<br>
+#include &quot;parse-number.h&quot;<br>
+<br>
+static void<br>
+assert_parse_with_suffix(const gchar *str, long expected)<br>
+{<br>
+  long n;<br>
+  gboolean res;<br>
+<br>
+  res = parse_number_with_suffix(str, &amp;n);<br>
+<br>
+  assert_gboolean(res, TRUE, &quot;Parsing (w/ suffix) %s failed&quot;, str);<br>
+  assert_gint64(n, expected, &quot;Parsing (w/ suffix) %s failed&quot;, str);<br>
+}<br>
+<br>
+static void<br>
+assert_parse_with_suffix_fails(const gchar *str)<br>
+{<br>
+  long n;<br>
+  gboolean res;<br>
+<br>
+  res = parse_number_with_suffix(str, &amp;n);<br>
+  assert_gboolean(res, FALSE, &quot;Parsing (w/ suffix) %s succeeded, while expecting failure&quot;, str);<br>
+}<br>
+<br>
+static void<br>
+assert_parse(const gchar *str, long expected)<br>
+{<br>
+  long n;<br>
+  gboolean res;<br>
+<br>
+  res = parse_number(str, &amp;n);<br>
+<br>
+  assert_gboolean(res, TRUE, &quot;Parsing (w/o suffix) %s failed&quot;, str);<br>
+  assert_gint64(n, expected, &quot;Parsing (w/o suffix) %s failed&quot;, str);<br>
+}<br>
+<br>
+static void<br>
+assert_parse_fails(const gchar *str)<br>
+{<br>
+  long n;<br>
+  gboolean res;<br>
+<br>
+  res = parse_number(str, &amp;n);<br>
+<br>
+  assert_gboolean(res, FALSE, &quot;Parsing (w/o suffix) %s succeeded, while expecting failure&quot;, str);<br>
+}<br>
+<br>
+static void<br>
+test_simple_numbers_are_parsed_properly(void)<br>
+{<br>
+  assert_parse_with_suffix(&quot;1234&quot;, 1234);<br>
+  assert_parse_with_suffix(&quot;+1234&quot;, 1234);<br>
+  assert_parse_with_suffix(&quot;-1234&quot;, -1234);<br>
+<br>
+  assert_parse(&quot;1234&quot;, 1234);<br>
+}<br>
+<br>
+static void<br>
+test_exponent_suffix_is_parsed_properly(void)<br>
+{<br>
+  assert_parse_with_suffix(&quot;1K&quot;, 1000);<br>
+  assert_parse_with_suffix(&quot;1k&quot;, 1000);<br>
+  assert_parse_with_suffix(&quot;1m&quot;, 1000 * 1000);<br>
+  assert_parse_with_suffix(&quot;1M&quot;, 1000 * 1000);<br>
+  assert_parse_with_suffix(&quot;1G&quot;, 1000 * 1000 * 1000);<br>
+  assert_parse_with_suffix(&quot;1g&quot;, 1000 * 1000 * 1000);<br>
+}<br>
+<br>
+static void<br>
+test_byte_units_are_accepted(void)<br>
+{<br>
+  assert_parse_with_suffix(&quot;1b&quot;, 1);<br>
+  assert_parse_with_suffix(&quot;1B&quot;, 1);<br>
+  assert_parse_with_suffix(&quot;1Kb&quot;, 1000);<br>
+  assert_parse_with_suffix(&quot;1kB&quot;, 1000);<br>
+  assert_parse_with_suffix(&quot;1mb&quot;, 1000 * 1000);<br>
+  assert_parse_with_suffix(&quot;1MB&quot;, 1000 * 1000);<br>
+  assert_parse_with_suffix(&quot;1Gb&quot;, 1000 * 1000 * 1000);<br>
+  assert_parse_with_suffix(&quot;1gB&quot;, 1000 * 1000 * 1000);<br>
+}<br>
+<br>
+static void<br>
+test_base2_is_selected_by_an_i_modifier(void)<br>
+{<br>
+  assert_parse_with_suffix(&quot;1Kib&quot;, 1024);<br>
+  assert_parse_with_suffix(&quot;1kiB&quot;, 1024);<br>
+  assert_parse_with_suffix(&quot;1Ki&quot;, 1024);<br>
+  assert_parse_with_suffix(&quot;1kI&quot;, 1024);<br>
+  assert_parse_with_suffix(&quot;1mib&quot;, 1024 * 1024);<br>
+  assert_parse_with_suffix(&quot;1MiB&quot;, 1024 * 1024);<br>
+  assert_parse_with_suffix(&quot;1Gib&quot;, 1024 * 1024 * 1024);<br>
+  assert_parse_with_suffix(&quot;1giB&quot;, 1024 * 1024 * 1024);<br>
+}<br>
+<br>
+static void<br>
+test_invalid_formats_are_not_accepted(void)<br>
+{<br>
+  assert_parse_with_suffix_fails(&quot;1234Z&quot;);<br>
+  assert_parse_with_suffix_fails(&quot;1234kZ&quot;);<br>
+  assert_parse_with_suffix_fails(&quot;1234kdZ&quot;);<br>
+  assert_parse_with_suffix_fails(&quot;1234kiZ&quot;);<br>
+  assert_parse_fails(&quot;1234kiZ&quot;);<br>
+}<br>
+<br>
+int<br>
+main(int argc, char *argv[])<br>
+{<br>
+  test_simple_numbers_are_parsed_properly();<br>
+  test_exponent_suffix_is_parsed_properly();<br>
+  test_byte_units_are_accepted();<br>
+  test_base2_is_selected_by_an_i_modifier();<br>
+  test_invalid_formats_are_not_accepted();<br>
+<br>
+  return 0;<br>
+}<br>
diff --git a/modules/basicfuncs/basic-funcs.c b/modules/basicfuncs/basic-funcs.c<br>
index c519d86..26fa8bd 100644<br>
--- a/modules/basicfuncs/basic-funcs.c<br>
+++ b/modules/basicfuncs/basic-funcs.c<br>
@@ -26,7 +26,7 @@<br>
 #include &quot;filter/filter-expr.h&quot;<br>
 #include &quot;filter/filter-expr-parser.h&quot;<br>
 #include &quot;cfg.h&quot;<br>
-#include &quot;misc.h&quot;<br>
+#include &quot;parse-number.h&quot;<br>
 #include &quot;str-format.h&quot;<br>
 #include &quot;plugin-types.h&quot;<br>
<br>
diff --git a/modules/basicfuncs/numeric-funcs.c b/modules/basicfuncs/numeric-funcs.c<br>
index 39e4d83..9125c3c 100644<br>
--- a/modules/basicfuncs/numeric-funcs.c<br>
+++ b/modules/basicfuncs/numeric-funcs.c<br>
@@ -32,7 +32,7 @@ tf_num_parse(gint argc, GString *argv[],<br>
       return FALSE;<br>
     }<br>
<br>
-  if (!num_parse_int(argv[0]-&gt;str, n))<br>
+  if (!parse_number_with_suffix(argv[0]-&gt;str, n))<br>
     {<br>
       msg_debug(&quot;Parsing failed, template function&#39;s first argument is not a number&quot;,<br>
                evt_tag_str(&quot;function&quot;, func_name),<br>
@@ -40,7 +40,7 @@ tf_num_parse(gint argc, GString *argv[],<br>
       return FALSE;<br>
     }<br>
<br>
-  if (!num_parse_int(argv[1]-&gt;str, m))<br>
+  if (!parse_number_with_suffix(argv[1]-&gt;str, m))<br>
     {<br>
       msg_debug(&quot;Parsing failed, template function&#39;s first argument is not a number&quot;,<br>
                evt_tag_str(&quot;function&quot;, func_name),<br>
diff --git a/modules/basicfuncs/str-funcs.c b/modules/basicfuncs/str-funcs.c<br>
index b0bcdd4..060795d 100644<br>
--- a/modules/basicfuncs/str-funcs.c<br>
+++ b/modules/basicfuncs/str-funcs.c<br>
@@ -79,14 +79,14 @@ tf_substr(LogMessage *msg, gint argc, GString *argv[], GString *result)<br>
     return;<br>
<br>
   /* get offset position from second argument */<br>
-  if (!num_parse_int(argv[1]-&gt;str, &amp;start)) {<br>
+  if (!parse_number(argv[1]-&gt;str, &amp;start)) {<br>
     msg_error(&quot;$(substr) parsing failed, start could not be parsed&quot;, evt_tag_str(&quot;start&quot;, argv[1]-&gt;str), NULL);<br>
     return;<br>
   }<br>
<br>
   /* if we were called with &gt;2 arguments, third was desired length */<br>
   if (argc &gt; 2) {<br>
-    if (!num_parse_int(argv[2]-&gt;str, &amp;len)) {<br>
+    if (!parse_number(argv[2]-&gt;str, &amp;len)) {<br>
       msg_error(&quot;$(substr) parsing failed, length could not be parsed&quot;, evt_tag_str(&quot;length&quot;, argv[2]-&gt;str), NULL);<br>
       return;<br>
     }<br>
diff --git a/tests/unit/Makefile.am b/tests/unit/Makefile.am<br>
index d5c8ac6..8841834 100644<br>
--- a/tests/unit/Makefile.am<br>
+++ b/tests/unit/Makefile.am<br>
@@ -15,8 +15,7 @@ tests_unit_TESTS                      =  \<br>
        tests/unit/test_logwriter          \<br>
        tests/unit/test_zone               \<br>
        tests/unit/test_persist_state      \<br>
-       tests/unit/test_value_pairs        \<br>
-       tests/unit/test_num_parse<br>
+       tests/unit/test_value_pairs<br>
<br>
 check_PROGRAMS                         += \<br>
        ${tests_unit_TESTS}<br>
@@ -81,10 +80,6 @@ tests_unit_test_persist_state_LDADD  = \<br>
 tests_unit_test_value_pairs_LDADD      = \<br>
        $(TEST_LDADD) $(unit_test_extra_modules)<br>
<br>
-tests_unit_test_num_parse_CFLAGS       = ${TEST_CFLAGS}<br>
-tests_unit_test_num_parse_LDADD                = \<br>
-       $(TEST_LDADD)<br>
-<br>
 CLEANFILES                             += \<br>
        test_values.persist                \<br>
        test_values.persist-<br>
diff --git a/tests/unit/test_num_parse.c b/tests/unit/test_num_parse.c<br>
deleted file mode 100644<br>
index ab75d9e..0000000<br>
--- a/tests/unit/test_num_parse.c<br>
+++ /dev/null<br>
@@ -1,37 +0,0 @@<br>
-#include &lt;stdlib.h&gt;<br>
-<br>
-#include &quot;testutils.h&quot;<br>
-#include &quot;misc.h&quot;<br>
-<br>
-static void<br>
-assert_num_parse (const gchar *str, long expected)<br>
-{<br>
-  long n;<br>
-  gboolean res;<br>
-<br>
-  res = num_parse_int(str, &amp;n);<br>
-<br>
-  assert_gboolean(res, TRUE, &quot;Parsing %s failed&quot;, str);<br>
-  assert_gint64(n, expected, &quot;Parsing %s failed&quot;, str);<br>
-}<br>
-<br>
-int<br>
-main(int argc, char *argv[])<br>
-{<br>
-  assert_num_parse(&quot;1234&quot;, 1234);<br>
-  assert_num_parse(&quot;+1234&quot;, 1234);<br>
-  assert_num_parse(&quot;-1234&quot;, -1234);<br>
-<br>
-  assert_num_parse(&quot;1K&quot;, 1000);<br>
-  assert_num_parse(&quot;1k&quot;, 1000);<br>
-  assert_num_parse(&quot;1kB&quot;, 1000);<br>
-  assert_num_parse(&quot;1Kb&quot;, 1000);<br>
-<br>
-  assert_num_parse(&quot;1m&quot;, 1000 * 1000);<br>
-  assert_num_parse(&quot;1M&quot;, 1000 * 1000);<br>
-<br>
-  assert_num_parse(&quot;1G&quot;, 1000 * 1000 * 1000);<br>
-  assert_num_parse(&quot;1g&quot;, 1000 * 1000 * 1000);<br>
-<br>
-  return 0;<br>
-}<br>
<br>
<br>
<br>
<br>
______________________________________________________________________________<br>
Member info: <a href="https://lists.balabit.hu/mailman/listinfo/syslog-ng" target="_blank">https://lists.balabit.hu/mailman/listinfo/syslog-ng</a><br>
Documentation: <a href="http://www.balabit.com/support/documentation/?product=syslog-ng" target="_blank">http://www.balabit.com/support/documentation/?product=syslog-ng</a><br>
FAQ: <a href="http://www.balabit.com/wiki/syslog-ng-faq" target="_blank">http://www.balabit.com/wiki/syslog-ng-faq</a><br>
<br>
</blockquote></div><br><br clear="all"><br>-- <br>Bazsi
</div>