]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Nicer sizes possible in config file.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 11 Jan 2008 13:20:22 +0000 (13:20 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 11 Jan 2008 13:20:22 +0000 (13:20 +0000)
git-svn-id: file:///svn/unbound/trunk@843 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
doc/example.conf
doc/unbound.conf.5
testcode/unitmain.c
util/config_file.c
util/config_file.h
util/configparser.c
util/configparser.y

index 52c4465fd6e1826a141bd5b2cb3c910c95d497c1..7081617f7cc7a9c3e7171f20ce1cbbb6ada48583 100644 (file)
@@ -3,6 +3,7 @@
        - added text describing the use of stub zones for private zones.
        - checkconf tests for bad hostnames (IP address), and for doubled
          interface lines.
+       - memory sizes can be given with 'k', 'Kb', or M or G appended.
 
 10 January 2008: Wouter
        - typo in example.conf.
index 1e20cdbb7cdb1fad5300444fc5bda72260eaa909..e29ba322446823d1e8c6de1e51259fb47c2627ab 100644 (file)
@@ -59,8 +59,8 @@ server:
        # msg-buffer-size: 65552
 
        # the amount of memory to use for the message cache.
-       # in bytes. default is 4 Mb
-       # msg-cache-size: 4194304
+       # plain value in bytes or you can append k, m or G. default is "4Mb". 
+       # msg-cache-size: 4m
 
        # the number of slabs to use for the message cache.
        # the number of slabs must be a power of 2.
@@ -71,8 +71,8 @@ server:
        # num-queries-per-thread: 1024
 
        # the amount of memory to use for the RRset cache.
-       # in bytes. default is 4 Mb
-       # rrset-cache-size: 4194304
+       # plain value in bytes or you can append k, m or G. default is "4Mb". 
+       # rrset-cache-size: 4m
 
        # the number of slabs to use for the RRset cache.
        # the number of slabs must be a power of 2.
@@ -99,7 +99,7 @@ server:
        # infra-cache-numhosts: 10000
 
        # the maximum size of the lame zones cached per host. in bytes.
-       # infra-cache-lame-size: 10240
+       # infra-cache-lame-size: 10k
 
        # Enable IPv4, "yes" or "no".
        # do-ip4: yes
@@ -247,8 +247,8 @@ server:
        # val-nsec3-keysize-iterations: "1024 150 2048 500 4096 2500"
 
        # the amount of memory to use for the key cache.
-       # in bytes. default is 4 Mb
-       # key-cache-size: 4194304
+       # plain value in bytes or you can append k, m or G. default is "4Mb". 
+       # key-cache-size: 4m
 
        # the number of slabs to use for the key cache.
        # the number of slabs must be a power of 2.
index e828bdc2b90180bbb7d01a88c9a5d296fb08ead7..d4a5bd1497c23326cb8d3c59a06a3f8dd52f81ab 100644 (file)
@@ -134,6 +134,8 @@ reply to the client.
 .TP
 .B msg\-cache\-size: \fI<number>
 Number of bytes size of the message cache. Default is 4 megabytes.
+A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, megabytes
+or gigabytes (1024*1024 bytes in a megabyte).
 .TP
 .B msg\-cache\-slabs: \fI<number>
 Number of slabs in the message cache. Slabs reduce lock contention by threads.
@@ -148,6 +150,8 @@ the existing queries. Default 1024.
 .TP
 .B rrset\-cache\-size: \fI<number>
 Number of bytes size of the RRset cache. Default is 4 megabytes.
+A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, megabytes
+or gigabytes (1024*1024 bytes in a megabyte).
 .TP
 .B rrset\-cache\-slabs: \fI<number>
 Number of slabs in the RRset cache. Slabs reduce lock contention by threads.
@@ -383,6 +387,8 @@ This table must be kept short; a very long list could cause slower operation.
 .TP
 .B key\-cache\-size: \fI<number>
 Number of bytes size of the key cache. Default is 4 megabytes.
+A plain number is in bytes, append 'k', 'm' or 'g' for kilobytes, megabytes
+or gigabytes (1024*1024 bytes in a megabyte).
 .TP
 .B key\-cache\-slabs: \fI<number>
 Number of slabs in the key cache. Slabs reduce lock contention by threads.
index d822737e8116d2c0cdf5c3bfd39608724f4c705f..63538e69eae5495e9c3d630670448be84d4ffbf8 100644 (file)
@@ -240,6 +240,44 @@ net_test()
        }
 }
 
+#include "util/config_file.h"
+/** test config_file: cfg_parse_memsize */
+static void
+config_memsize_test() 
+{
+       size_t v = 0;
+       if(0) {
+               /* these emit errors */
+               unit_assert( cfg_parse_memsize("", &v) == 0);
+               unit_assert( cfg_parse_memsize("bla", &v) == 0);
+               unit_assert( cfg_parse_memsize("nop", &v) == 0);
+               unit_assert( cfg_parse_memsize("n0b", &v) == 0);
+               unit_assert( cfg_parse_memsize("gb", &v) == 0);
+               unit_assert( cfg_parse_memsize("b", &v) == 0);
+               unit_assert( cfg_parse_memsize("kb", &v) == 0);
+               unit_assert( cfg_parse_memsize("kk kb", &v) == 0);
+       }
+       unit_assert( cfg_parse_memsize("0", &v) && v==0);
+       unit_assert( cfg_parse_memsize("1", &v) && v==1);
+       unit_assert( cfg_parse_memsize("10", &v) && v==10);
+       unit_assert( cfg_parse_memsize("10b", &v) && v==10);
+       unit_assert( cfg_parse_memsize("5b", &v) && v==5);
+       unit_assert( cfg_parse_memsize("1024", &v) && v==1024);
+       unit_assert( cfg_parse_memsize("1k", &v) && v==1024);
+       unit_assert( cfg_parse_memsize("1K", &v) && v==1024);
+       unit_assert( cfg_parse_memsize("1Kb", &v) && v==1024);
+       unit_assert( cfg_parse_memsize("1kb", &v) && v==1024);
+       unit_assert( cfg_parse_memsize("1 kb", &v) && v==1024);
+       unit_assert( cfg_parse_memsize("10 kb", &v) && v==10240);
+       unit_assert( cfg_parse_memsize("2k", &v) && v==2048);
+       unit_assert( cfg_parse_memsize("2m", &v) && v==2048*1024);
+       unit_assert( cfg_parse_memsize("3M", &v) && v==3072*1024);
+       unit_assert( cfg_parse_memsize("40m", &v) && v==40960*1024);
+       unit_assert( cfg_parse_memsize("1G", &v) && v==1024*1024*1024);
+       unit_assert( cfg_parse_memsize("1 Gb", &v) && v==1024*1024*1024);
+       unit_assert( cfg_parse_memsize("0 Gb", &v) && v==0*1024*1024);
+}
+
 #include "util/rtt.h"
 /** test RTT code */
 static void
@@ -360,6 +398,7 @@ main(int argc, char* argv[])
        rnd_test();
        verify_test();
        net_test();
+       config_memsize_test();
        dname_test();
        anchors_test();
        rtt_test();
index ca5e73d743016c796d1da9de96faa98b98b8e0e3..57ad14962a425fcd2b0d573143577b810ba853ef 100644 (file)
@@ -386,6 +386,60 @@ cfg_count_numbers(const char* s)
         return num;
 }
 
+/** all digit number */
+static int isalldigit(const char* str, size_t l)
+{
+       size_t i;
+       for(i=0; i<l; i++)
+               if(!isdigit(str[i]))
+                       return 0;
+       return 1;
+}
+
+int 
+cfg_parse_memsize(const char* str, size_t* res)
+{
+       size_t len = (size_t)strlen(str);
+       size_t mult = 1;
+       if(!str || len == 0) {
+               log_err("not a size: '%s'", str);
+               return 0;
+       }
+       if(isalldigit(str, len)) {
+               *res = (size_t)atol(str);
+               return 1;
+       }
+       /* check appended num */
+       while(len>0 && str[len-1]==' ')
+               len--;
+       if(len > 1 && str[len-1] == 'b') 
+               len--;
+       else if(len > 1 && str[len-1] == 'B') 
+               len--;
+       
+       if(len > 1 && tolower(str[len-1]) == 'g')
+               mult = 1024*1024*1024;
+       else if(len > 1 && tolower(str[len-1]) == 'm')
+               mult = 1024*1024;
+       else if(len > 1 && tolower(str[len-1]) == 'k')
+               mult = 1024;
+       else if(len > 0 && isdigit(str[len-1]))
+               mult = 1;
+       else {
+               log_err("unknown size specifier: '%s'", str);
+               return 0;
+       }
+       while(len>1 && str[len-2]==' ')
+               len--;
+
+       if(!isalldigit(str, len-1)) {
+               log_err("unknown size specifier: '%s'", str);
+               return 0;
+       }
+       *res = ((size_t)atol(str)) * mult;
+       return 1;
+}
+
 /** the MAX_TTL global */
 extern uint32_t MAX_TTL;
 
index 4ed90b3785e09cc0e7fd8144fe13724cdd8ff7e6..8cc975e4c7d1729e6651658f371ca6582e3e7e8b 100644 (file)
@@ -313,6 +313,17 @@ uint32_t cfg_convert_timeval(const char* str);
  */
 int cfg_count_numbers(const char* str);
 
+/**
+ * Convert a 'nice' memory or file size into a bytecount
+ * From '100k' to 102400. and so on. Understands kKmMgG.
+ * k=1024, m=1024*1024, g=1024*1024*1024.
+ * @param str: string
+ * @param res: result is stored here, size in bytes.
+ * @return: true if parsed correctly, or 0 on a parse error (and an error 
+ * is logged).
+ */
+int cfg_parse_memsize(const char* str, size_t* res);
+
 /**
  * Used during options parsing
  */
index 64286122bc9660e024643957bdc61197e162ef10..8f87a67e8f8c55f30a8f61e17b353cbcf69f9b72 100644 (file)
@@ -634,11 +634,11 @@ static const yytype_uint16 yyrline[] =
      145,   145,   145,   147,   159,   160,   161,   161,   161,   163,
      172,   181,   190,   203,   218,   227,   236,   245,   254,   263,
      272,   281,   290,   304,   311,   318,   325,   333,   340,   347,
-     355,   363,   370,   379,   388,   395,   402,   413,   422,   435,
-     444,   453,   466,   475,   484,   493,   502,   515,   522,   532,
-     542,   552,   562,   569,   579,   592,   599,   617,   626,   635,
-     645,   655,   662,   671,   684,   703,   710,   717,   724,   731,
-     738,   745
+     355,   363,   370,   379,   388,   395,   402,   413,   421,   434,
+     443,   451,   464,   473,   482,   491,   500,   513,   520,   530,
+     540,   550,   560,   567,   577,   590,   597,   615,   624,   633,
+     643,   653,   660,   668,   681,   700,   707,   714,   721,   728,
+     735,   742
 };
 #endif
 
@@ -2063,15 +2063,14 @@ yyreduce:
 #line 414 "util/configparser.y"
     {
                OUTYY(("P(server_msg_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
-                       yyerror("number expected");
-               else cfg_parser->cfg->msg_cache_size = atoi((yyvsp[(2) - (2)].str));
+               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->msg_cache_size))
+                       yyerror("memory size expected");
                free((yyvsp[(2) - (2)].str));
        }
     break;
 
   case 108:
-#line 423 "util/configparser.y"
+#line 422 "util/configparser.y"
     {
                OUTYY(("P(server_msg_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2086,7 +2085,7 @@ yyreduce:
     break;
 
   case 109:
-#line 436 "util/configparser.y"
+#line 435 "util/configparser.y"
     {
                OUTYY(("P(server_num_queries_per_thread:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2097,18 +2096,17 @@ yyreduce:
     break;
 
   case 110:
-#line 445 "util/configparser.y"
+#line 444 "util/configparser.y"
     {
                OUTYY(("P(server_rrset_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
-                       yyerror("number expected");
-               else cfg_parser->cfg->rrset_cache_size = atoi((yyvsp[(2) - (2)].str));
+               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->rrset_cache_size))
+                       yyerror("memory size expected");
                free((yyvsp[(2) - (2)].str));
        }
     break;
 
   case 111:
-#line 454 "util/configparser.y"
+#line 452 "util/configparser.y"
     {
                OUTYY(("P(server_rrset_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2123,7 +2121,7 @@ yyreduce:
     break;
 
   case 112:
-#line 467 "util/configparser.y"
+#line 465 "util/configparser.y"
     {
                OUTYY(("P(server_infra_host_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2134,7 +2132,7 @@ yyreduce:
     break;
 
   case 113:
-#line 476 "util/configparser.y"
+#line 474 "util/configparser.y"
     {
                OUTYY(("P(server_infra_lame_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2145,7 +2143,7 @@ yyreduce:
     break;
 
   case 114:
-#line 485 "util/configparser.y"
+#line 483 "util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_numhosts:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2156,18 +2154,18 @@ yyreduce:
     break;
 
   case 115:
-#line 494 "util/configparser.y"
+#line 492 "util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_lame_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
+               if(!cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->
+                       infra_cache_lame_size))
                        yyerror("number expected");
-               else cfg_parser->cfg->infra_cache_lame_size = atoi((yyvsp[(2) - (2)].str));
                free((yyvsp[(2) - (2)].str));
        }
     break;
 
   case 116:
-#line 503 "util/configparser.y"
+#line 501 "util/configparser.y"
     {
                OUTYY(("P(server_infra_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2182,7 +2180,7 @@ yyreduce:
     break;
 
   case 117:
-#line 516 "util/configparser.y"
+#line 514 "util/configparser.y"
     {
                OUTYY(("P(server_target_fetch_policy:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->target_fetch_policy);
@@ -2191,7 +2189,7 @@ yyreduce:
     break;
 
   case 118:
-#line 523 "util/configparser.y"
+#line 521 "util/configparser.y"
     {
                OUTYY(("P(server_harden_short_bufsize:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2203,7 +2201,7 @@ yyreduce:
     break;
 
   case 119:
-#line 533 "util/configparser.y"
+#line 531 "util/configparser.y"
     {
                OUTYY(("P(server_harden_large_queries:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2215,7 +2213,7 @@ yyreduce:
     break;
 
   case 120:
-#line 543 "util/configparser.y"
+#line 541 "util/configparser.y"
     {
                OUTYY(("P(server_harden_glue:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2227,7 +2225,7 @@ yyreduce:
     break;
 
   case 121:
-#line 553 "util/configparser.y"
+#line 551 "util/configparser.y"
     {
                OUTYY(("P(server_harden_dnssec_stripped:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2239,7 +2237,7 @@ yyreduce:
     break;
 
   case 122:
-#line 563 "util/configparser.y"
+#line 561 "util/configparser.y"
     {
                OUTYY(("P(server_do_not_query_address:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->donotqueryaddrs, (yyvsp[(2) - (2)].str)))
@@ -2248,7 +2246,7 @@ yyreduce:
     break;
 
   case 123:
-#line 570 "util/configparser.y"
+#line 568 "util/configparser.y"
     {
                OUTYY(("P(server_do_not_query_localhost:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2260,7 +2258,7 @@ yyreduce:
     break;
 
   case 124:
-#line 580 "util/configparser.y"
+#line 578 "util/configparser.y"
     {
                OUTYY(("P(server_access_control:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
                if(strcmp((yyvsp[(3) - (3)].str), "deny")!=0 && strcmp((yyvsp[(3) - (3)].str), "refuse")!=0 &&
@@ -2275,7 +2273,7 @@ yyreduce:
     break;
 
   case 125:
-#line 593 "util/configparser.y"
+#line 591 "util/configparser.y"
     {
                OUTYY(("P(server_module_conf:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->module_conf);
@@ -2284,7 +2282,7 @@ yyreduce:
     break;
 
   case 126:
-#line 600 "util/configparser.y"
+#line 598 "util/configparser.y"
     {
                OUTYY(("P(server_val_override_date:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strlen((yyvsp[(2) - (2)].str)) == 0 || strcmp((yyvsp[(2) - (2)].str), "0") == 0) {
@@ -2304,7 +2302,7 @@ yyreduce:
     break;
 
   case 127:
-#line 618 "util/configparser.y"
+#line 616 "util/configparser.y"
     {
                OUTYY(("P(server_cache_max_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2315,7 +2313,7 @@ yyreduce:
     break;
 
   case 128:
-#line 627 "util/configparser.y"
+#line 625 "util/configparser.y"
     {
                OUTYY(("P(server_bogus_ttl:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0 && strcmp((yyvsp[(2) - (2)].str), "0") != 0)
@@ -2326,7 +2324,7 @@ yyreduce:
     break;
 
   case 129:
-#line 636 "util/configparser.y"
+#line 634 "util/configparser.y"
     {
                OUTYY(("P(server_val_clean_additional:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2338,7 +2336,7 @@ yyreduce:
     break;
 
   case 130:
-#line 646 "util/configparser.y"
+#line 644 "util/configparser.y"
     {
                OUTYY(("P(server_val_permissive_mode:%s)\n", (yyvsp[(2) - (2)].str)));
                if(strcmp((yyvsp[(2) - (2)].str), "yes") != 0 && strcmp((yyvsp[(2) - (2)].str), "no") != 0)
@@ -2350,7 +2348,7 @@ yyreduce:
     break;
 
   case 131:
-#line 656 "util/configparser.y"
+#line 654 "util/configparser.y"
     {
                OUTYY(("P(server_val_nsec3_keysize_iterations:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->val_nsec3_key_iterations);
@@ -2359,18 +2357,17 @@ yyreduce:
     break;
 
   case 132:
-#line 663 "util/configparser.y"
+#line 661 "util/configparser.y"
     {
                OUTYY(("P(server_key_cache_size:%s)\n", (yyvsp[(2) - (2)].str)));
-               if(atoi((yyvsp[(2) - (2)].str)) == 0)
-                       yyerror("number expected");
-               else cfg_parser->cfg->key_cache_size = atoi((yyvsp[(2) - (2)].str));
+               if(cfg_parse_memsize((yyvsp[(2) - (2)].str), &cfg_parser->cfg->key_cache_size))
+                       yyerror("memory size expected");
                free((yyvsp[(2) - (2)].str));
        }
     break;
 
   case 133:
-#line 672 "util/configparser.y"
+#line 669 "util/configparser.y"
     {
                OUTYY(("P(server_key_cache_slabs:%s)\n", (yyvsp[(2) - (2)].str)));
                if(atoi((yyvsp[(2) - (2)].str)) == 0)
@@ -2385,7 +2382,7 @@ yyreduce:
     break;
 
   case 134:
-#line 685 "util/configparser.y"
+#line 682 "util/configparser.y"
     {
                OUTYY(("P(server_local_zone:%s %s)\n", (yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].str)));
                if(strcmp((yyvsp[(3) - (3)].str), "static")!=0 && strcmp((yyvsp[(3) - (3)].str), "deny")!=0 &&
@@ -2406,7 +2403,7 @@ yyreduce:
     break;
 
   case 135:
-#line 704 "util/configparser.y"
+#line 701 "util/configparser.y"
     {
                OUTYY(("P(server_local_data:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->local_data, (yyvsp[(2) - (2)].str)))
@@ -2415,7 +2412,7 @@ yyreduce:
     break;
 
   case 136:
-#line 711 "util/configparser.y"
+#line 708 "util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->stubs->name);
@@ -2424,7 +2421,7 @@ yyreduce:
     break;
 
   case 137:
-#line 718 "util/configparser.y"
+#line 715 "util/configparser.y"
     {
                OUTYY(("P(stub-host:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->hosts, (yyvsp[(2) - (2)].str)))
@@ -2433,7 +2430,7 @@ yyreduce:
     break;
 
   case 138:
-#line 725 "util/configparser.y"
+#line 722 "util/configparser.y"
     {
                OUTYY(("P(stub-addr:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->stubs->addrs, (yyvsp[(2) - (2)].str)))
@@ -2442,7 +2439,7 @@ yyreduce:
     break;
 
   case 139:
-#line 732 "util/configparser.y"
+#line 729 "util/configparser.y"
     {
                OUTYY(("P(name:%s)\n", (yyvsp[(2) - (2)].str)));
                free(cfg_parser->cfg->forwards->name);
@@ -2451,7 +2448,7 @@ yyreduce:
     break;
 
   case 140:
-#line 739 "util/configparser.y"
+#line 736 "util/configparser.y"
     {
                OUTYY(("P(forward-host:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->hosts, (yyvsp[(2) - (2)].str)))
@@ -2460,7 +2457,7 @@ yyreduce:
     break;
 
   case 141:
-#line 746 "util/configparser.y"
+#line 743 "util/configparser.y"
     {
                OUTYY(("P(forward-addr:%s)\n", (yyvsp[(2) - (2)].str)));
                if(!cfg_strlist_insert(&cfg_parser->cfg->forwards->addrs, (yyvsp[(2) - (2)].str)))
@@ -2470,7 +2467,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 2474 "util/configparser.c"
+#line 2471 "util/configparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2684,7 +2681,7 @@ yyreturn:
 }
 
 
-#line 752 "util/configparser.y"
+#line 749 "util/configparser.y"
 
 
 /* parse helper routines could be here */
index 2a25c9b47ac07488d954669715eef1df9bb77bf0..0d542b5ed637febd497064ae5785d39ea4b5b3a6 100644 (file)
@@ -413,9 +413,8 @@ server_msg_buffer_size: VAR_MSG_BUFFER_SIZE STRING
 server_msg_cache_size: VAR_MSG_CACHE_SIZE STRING
        {
                OUTYY(("P(server_msg_cache_size:%s)\n", $2));
-               if(atoi($2) == 0)
-                       yyerror("number expected");
-               else cfg_parser->cfg->msg_cache_size = atoi($2);
+               if(!cfg_parse_memsize($2, &cfg_parser->cfg->msg_cache_size))
+                       yyerror("memory size expected");
                free($2);
        }
        ;
@@ -444,9 +443,8 @@ server_num_queries_per_thread: VAR_NUM_QUERIES_PER_THREAD STRING
 server_rrset_cache_size: VAR_RRSET_CACHE_SIZE STRING
        {
                OUTYY(("P(server_rrset_cache_size:%s)\n", $2));
-               if(atoi($2) == 0)
-                       yyerror("number expected");
-               else cfg_parser->cfg->rrset_cache_size = atoi($2);
+               if(!cfg_parse_memsize($2, &cfg_parser->cfg->rrset_cache_size))
+                       yyerror("memory size expected");
                free($2);
        }
        ;
@@ -493,9 +491,9 @@ server_infra_cache_numhosts: VAR_INFRA_CACHE_NUMHOSTS STRING
 server_infra_cache_lame_size: VAR_INFRA_CACHE_LAME_SIZE STRING
        {
                OUTYY(("P(server_infra_cache_lame_size:%s)\n", $2));
-               if(atoi($2) == 0)
+               if(!cfg_parse_memsize($2, &cfg_parser->cfg->
+                       infra_cache_lame_size))
                        yyerror("number expected");
-               else cfg_parser->cfg->infra_cache_lame_size = atoi($2);
                free($2);
        }
        ;
@@ -662,9 +660,8 @@ server_val_nsec3_keysize_iterations: VAR_VAL_NSEC3_KEYSIZE_ITERATIONS STRING
 server_key_cache_size: VAR_KEY_CACHE_SIZE STRING
        {
                OUTYY(("P(server_key_cache_size:%s)\n", $2));
-               if(atoi($2) == 0)
-                       yyerror("number expected");
-               else cfg_parser->cfg->key_cache_size = atoi($2);
+               if(cfg_parse_memsize($2, &cfg_parser->cfg->key_cache_size))
+                       yyerror("memory size expected");
                free($2);
        }
        ;