From: Wouter Wijngaards Date: Fri, 11 Jan 2008 13:20:22 +0000 (+0000) Subject: Nicer sizes possible in config file. X-Git-Tag: release-0.9~97 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1315edc5e9f8a36575be7b6874e23e0743f1cbc9;p=thirdparty%2Funbound.git Nicer sizes possible in config file. git-svn-id: file:///svn/unbound/trunk@843 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/doc/Changelog b/doc/Changelog index 52c4465fd..7081617f7 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -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. diff --git a/doc/example.conf b/doc/example.conf index 1e20cdbb7..e29ba3224 100644 --- a/doc/example.conf +++ b/doc/example.conf @@ -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. diff --git a/doc/unbound.conf.5 b/doc/unbound.conf.5 index e828bdc2b..d4a5bd149 100644 --- a/doc/unbound.conf.5 +++ b/doc/unbound.conf.5 @@ -134,6 +134,8 @@ reply to the client. .TP .B msg\-cache\-size: \fI 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 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 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 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 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 of slabs in the key cache. Slabs reduce lock contention by threads. diff --git a/testcode/unitmain.c b/testcode/unitmain.c index d822737e8..63538e69e 100644 --- a/testcode/unitmain.c +++ b/testcode/unitmain.c @@ -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(); diff --git a/util/config_file.c b/util/config_file.c index ca5e73d74..57ad14962 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -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; i0 && 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; diff --git a/util/config_file.h b/util/config_file.h index 4ed90b378..8cc975e4c 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -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 */ diff --git a/util/configparser.c b/util/configparser.c index 64286122b..8f87a67e8 100644 --- a/util/configparser.c +++ b/util/configparser.c @@ -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 */ diff --git a/util/configparser.y b/util/configparser.y index 2a25c9b47..0d542b5ed 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -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); } ;