X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=clients%2Fms_setting.c;h=2821ec524d2254bbb8713de66ef5e8f45d4d43b3;hb=e42302e08fa4d04cb21eaf7493f5f92b11169c03;hp=51f89714ac7c407f1039698444c6e2bbf3d23e70;hpb=e926cd518e3605dd3fa050734061a5fabf5460bd;p=m6w6%2Flibmemcached diff --git a/clients/ms_setting.c b/clients/ms_setting.c index 51f89714..2821ec52 100644 --- a/clients/ms_setting.c +++ b/clients/ms_setting.c @@ -12,6 +12,9 @@ #include "config.h" #include +#include +#include + #include "ms_setting.h" #include "ms_conn.h" @@ -57,6 +60,82 @@ static void ms_print_setting(void); static void ms_setting_slapmode_init_pre(void); static void ms_setting_slapmode_init_post(void); +#if !defined(HAVE_GETLINE) +#include +static ssize_t getline (char **line, size_t *line_size, FILE *fp) +{ + char delim= '\n'; + ssize_t result= 0; + size_t cur_len= 0; + + if (line == NULL || line_size == NULL || fp == NULL) + { + errno = EINVAL; + return -1; + } + + if (*line == NULL || *line_size == 0) + { + char *new_line; + *line_size = 120; + new_line= (char *) realloc (*line, *line_size); + if (new_line == NULL) + { + result= -1; + return result; + } + *line= new_line; + } + + for (;;) + { + int i= getc(fp); + if (i == EOF) + { + result = -1; + break; + } + + /* Make enough space for len+1 (for final NUL) bytes. */ + if (cur_len + 1 >= *line_size) + { + size_t needed_max= + SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; + size_t needed= (2 * (*line_size)) + 1; + char *new_line; + + if (needed_max < needed) + needed= needed_max; + if (cur_len + 1 >= needed) + { + result= -1; + errno= EOVERFLOW; + return result; + } + + new_line= (char *)realloc(*line, needed); + if (new_line == NULL) + { + result= -1; + return result; + } + + *line= new_line; + *line_size= needed; + } + + (*line)[cur_len]= (char)i; + cur_len++; + + if (i == delim) + break; + } + (*line)[cur_len] = '\0'; + if (cur_len != 0) + return (ssize_t)cur_len; + return result; +} +#endif /** * parse the server list string, and build the servers @@ -119,7 +198,7 @@ static void ms_get_serverlist(char *str) { srvs= (ms_mcd_server_t *)realloc( ms_setting.servers, - (uint64_t)ms_setting.total_srv_cnt + (size_t)ms_setting.total_srv_cnt * sizeof(ms_mcd_server_t) * 2); if (srvs == NULL) { @@ -319,7 +398,7 @@ static void ms_parse_cfg_file(char *cfg_file) if (nread != EOF) { - if (sscanf(line, "%lu %lu %lf ", &start_len, + if (sscanf(line, "%zu %zu %lf ", &start_len, &end_len, &proportion) != 3) { conf_type= ms_get_conf_type(line); @@ -334,7 +413,7 @@ static void ms_parse_cfg_file(char *cfg_file) { key_distr= (ms_key_distr_t *)realloc( ms_setting.key_distr, - (uint64_t)ms_setting. + (size_t)ms_setting. total_key_rng_cnt * sizeof(ms_key_distr_t) * 2); if (key_distr == NULL) { @@ -361,7 +440,7 @@ static void ms_parse_cfg_file(char *cfg_file) if (nread != EOF) { - if (sscanf(line, "%lu %lu %lf %lu", &start_len, &end_len, + if (sscanf(line, "%zu %zu %lf %zu", &start_len, &end_len, &proportion, &frequence) != 3) { conf_type= ms_get_conf_type(line); @@ -378,7 +457,7 @@ static void ms_parse_cfg_file(char *cfg_file) { val_distr= (ms_value_distr_t *)realloc( ms_setting.value_distr, - (uint64_t)ms_setting. + (size_t)ms_setting. total_val_rng_cnt * sizeof(ms_value_distr_t) * 2); if (val_distr == NULL) { @@ -778,9 +857,9 @@ static void ms_print_setting() } else { - fprintf(stdout, "execute number: %ld\n", ms_setting.exec_num); + fprintf(stdout, "execute number: %" PRId64 "\n", ms_setting.exec_num); } - fprintf(stdout, "windows size: %ldk\n", + fprintf(stdout, "windows size: %" PRId64 "k\n", (int64_t)(ms_setting.win_size / 1024)); fprintf(stdout, "set proportion: set_prop=%.2f\n", ms_setting.cmd_distr[CMD_SET].cmd_prop); @@ -830,7 +909,7 @@ void ms_setting_init_pre() ms_setting.run_time= DEFAULT_RUN_TIME; ms_setting.total_srv_cnt= MCD_SRVS_NUM_INIT; ms_setting.servers= (ms_mcd_server_t *)malloc( - (uint64_t)ms_setting.total_srv_cnt + (size_t)ms_setting.total_srv_cnt * sizeof(ms_mcd_server_t)); if (ms_setting.servers == NULL) { @@ -849,7 +928,7 @@ static void ms_setting_slapmode_init_post() { ms_setting.total_key_rng_cnt= KEY_RANGE_COUNT_INIT; ms_setting.key_distr= (ms_key_distr_t *)malloc( - (uint64_t)ms_setting.total_key_rng_cnt + (size_t)ms_setting.total_key_rng_cnt * sizeof(ms_key_distr_t)); if (ms_setting.key_distr == NULL) { @@ -859,7 +938,7 @@ static void ms_setting_slapmode_init_post() ms_setting.total_val_rng_cnt= VALUE_RANGE_COUNT_INIT; ms_setting.value_distr= (ms_value_distr_t *)malloc( - (uint64_t)ms_setting.total_val_rng_cnt + (size_t)ms_setting.total_val_rng_cnt * sizeof( ms_value_distr_t)); if (ms_setting.value_distr == NULL)