X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=clients%2Fms_setting.c;h=d43356c7a802995e53d09ea69d8a8f2ced924f2c;hb=05a7455d43e7303d4accb71eba006b8ed70afed9;hp=4791c479b9ba8a26507a63754dcf013aabc88526;hpb=7e85e11584bdd452251c67d64bed45867315fb97;p=m6w6%2Flibmemcached diff --git a/clients/ms_setting.c b/clients/ms_setting.c index 4791c479..d43356c7 100644 --- a/clients/ms_setting.c +++ b/clients/ms_setting.c @@ -12,7 +12,15 @@ #include "config.h" #include +#include +#include +#include #include +#include +#include +#include + + #include "ms_setting.h" #include "ms_conn.h" @@ -22,6 +30,8 @@ #define RAND_CHAR_SIZE (10 * 1024 * 1024) /* 10M character table */ #define RESERVED_RAND_CHAR_SIZE (2 * 1024 * 1024) /* reserved 2M to avoid pointer sloping over */ +#define DEFAULT_CONFIG_NAME ".memslap.cnf" + #define DEFAULT_THREADS_NUM 1 /* default start one thread */ #define DEFAULT_CONNS_NUM 16 /* default each thread with 16 connections */ #define DEFAULT_EXE_NUM 0 /* default execute number is 0 */ @@ -59,7 +69,7 @@ static void ms_print_setting(void); static void ms_setting_slapmode_init_pre(void); static void ms_setting_slapmode_init_post(void); -#if defined(__SUNPRO_C) +#if !defined(HAVE_GETLINE) #include static ssize_t getline (char **line, size_t *line_size, FILE *fp) { @@ -88,9 +98,7 @@ static ssize_t getline (char **line, size_t *line_size, FILE *fp) for (;;) { - char i; - - i = getc(fp); + int i= getc(fp); if (i == EOF) { result = -1; @@ -125,15 +133,15 @@ static ssize_t getline (char **line, size_t *line_size, FILE *fp) *line_size= needed; } - (*line)[cur_len]= i; + (*line)[cur_len]= (char)i; cur_len++; if (i == delim) break; } (*line)[cur_len] = '\0'; - result= cur_len ? cur_len : result; - + if (cur_len != 0) + return (ssize_t)cur_len; return result; } #endif @@ -199,7 +207,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) { @@ -328,12 +336,30 @@ static int ms_read_is_data(char *line, ssize_t nread) */ static void ms_no_config_file() { - FILE *fd= fopen("config", "w+"); + char userpath[PATH_MAX]; + struct passwd *usr= NULL; + FILE *fd; + usr= getpwuid(getuid()); + + snprintf(userpath, PATH_MAX, "%s/%s", usr->pw_dir, DEFAULT_CONFIG_NAME); + + if (access (userpath, F_OK | R_OK) == 0) + goto exit; + + fd= fopen(userpath, "w+"); + + if (fd == NULL) + { + fprintf(stderr, "Could not create default configure file %s\n", userpath); + perror(strerror(errno)); + exit(1); + } fprintf(fd, "%s", DEFAULT_CONGIF_STR); fclose(fd); - ms_setting.cfg_file= strdup("config"); +exit: + ms_setting.cfg_file= strdup(userpath); } /* ms_no_config_file */ @@ -356,13 +382,11 @@ static void ms_parse_cfg_file(char *cfg_file) int end_of_file= 0; ms_key_distr_t *key_distr= NULL; ms_value_distr_t *val_distr= NULL; - bool no_cfg= false; if (cfg_file == NULL) { ms_no_config_file(); cfg_file= ms_setting.cfg_file; - no_cfg= true; } /*read key value configure file*/ @@ -377,6 +401,7 @@ static void ms_parse_cfg_file(char *cfg_file) if ((((nread= getline(&line, &read_len, f)) == 1) || ! ms_read_is_data(line, nread)) && (nread != EOF)) /* bypass blank line */ continue; + if (nread == EOF) { fprintf(stderr, "Bad configuration file, no configuration find.\n"); @@ -399,7 +424,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); @@ -414,7 +439,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) { @@ -441,7 +466,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); @@ -458,7 +483,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) { @@ -529,13 +554,10 @@ static void ms_parse_cfg_file(char *cfg_file) fclose(f); - if (no_cfg) - { - remove(ms_setting.cfg_file); - } - if (line != NULL) + { free(line); + } } /* ms_parse_cfg_file */ @@ -858,9 +880,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); @@ -910,7 +932,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) { @@ -928,9 +950,9 @@ void ms_setting_init_pre() 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 - * sizeof(ms_key_distr_t)); + ms_setting.key_distr= + (ms_key_distr_t *)malloc((size_t)ms_setting.total_key_rng_cnt * sizeof(ms_key_distr_t)); + if (ms_setting.key_distr == NULL) { fprintf(stderr, "Can't allocate key distribution structure.\n"); @@ -938,10 +960,10 @@ 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 - * sizeof( - ms_value_distr_t)); + + ms_setting.value_distr= + (ms_value_distr_t *)malloc((size_t)ms_setting.total_val_rng_cnt * sizeof( ms_value_distr_t)); + if (ms_setting.value_distr == NULL) { fprintf(stderr, "Can't allocate value distribution structure.\n");