add lcov and lcov-clean target
[m6w6/libmemcached] / clients / ms_setting.c
index 4791c479b9ba8a26507a63754dcf013aabc88526..d43356c7a802995e53d09ea69d8a8f2ced924f2c 100644 (file)
 #include "config.h"
 
 #include <ctype.h>
+#include <inttypes.h>
+#include <limits.h>
+#include <pwd.h>
 #include <strings.h>
+#include <sys/types.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+
 
 #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 <limits.h>
 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");