[Groonga-commit] groonga/groonga at bdd9671 [master] windows: use strcat_s() on Windows

Back to archive index

Kouhei Sutou null+****@clear*****
Sat Apr 18 22:08:21 JST 2015


Kouhei Sutou	2015-04-18 22:08:21 +0900 (Sat, 18 Apr 2015)

  New Revision: bdd96711503cdb8a4913af8a4819cc7b3a51662c
  https://github.com/groonga/groonga/commit/bdd96711503cdb8a4913af8a4819cc7b3a51662c

  Message:
    windows: use strcat_s() on Windows

  Modified files:
    include/groonga/portability.h
    lib/ii.c
    lib/mrb.c
    lib/plugin.c
    lib/proc.c
    plugins/query_expanders/tsv.c
    src/groonga.c
    src/groonga_benchmark.c

  Modified: include/groonga/portability.h (+8 -0)
===================================================================
--- include/groonga/portability.h    2015-04-18 21:59:09 +0900 (e387910)
+++ include/groonga/portability.h    2015-04-18 22:08:21 +0900 (c9a095a)
@@ -110,6 +110,14 @@
 #endif /* WIN32 */
 
 #ifdef WIN32
+# define grn_strcat(dest, dest_size, src)       \
+  strcat_s((dest), (dest_size), (src))
+#else /* WIN32 */
+# define grn_strcat(dest, dest_size, src)       \
+  strcat((dest), (src))
+#endif /* WIN32 */
+
+#ifdef WIN32
 # define grn_snprintf(dest, dest_size, n, format, ...)          \
   _snprintf_s((dest), (dest_size), (n), (format), __VA_ARGS__)
 #else /* WIN32 */

  Modified: lib/ii.c (+2 -2)
===================================================================
--- lib/ii.c    2015-04-18 21:59:09 +0900 (50c41fb)
+++ lib/ii.c    2015-04-18 22:08:21 +0900 (c80b41d)
@@ -3484,7 +3484,7 @@ _grn_ii_create(grn_ctx *ctx, grn_ii *ii, const char *path, grn_obj *lexicon, uin
   if (!seg) { return NULL; }
   if (path) {
     grn_strcpy(path2, PATH_MAX, path);
-    strcat(path2, ".c");
+    grn_strcat(path2, PATH_MAX, ".c");
     chunk = grn_io_create(ctx, path2, 0, S_CHUNK, GRN_II_MAX_CHUNK, grn_io_auto,
                           GRN_IO_EXPIRE_SEGMENT);
   } else {
@@ -3603,7 +3603,7 @@ grn_ii_open(grn_ctx *ctx, const char *path, grn_obj *lexicon)
   }
   if (strlen(path) + 6 >= PATH_MAX) { return NULL; }
   grn_strcpy(path2, PATH_MAX, path);
-  strcat(path2, ".c");
+  grn_strcat(path2, PATH_MAX, ".c");
   seg = grn_io_open(ctx, path, grn_io_auto);
   if (!seg) { return NULL; }
   chunk = grn_io_open(ctx, path2, grn_io_auto);

  Modified: lib/mrb.c (+5 -5)
===================================================================
--- lib/mrb.c    2015-04-18 21:59:09 +0900 (24dc133)
+++ lib/mrb.c    2015-04-18 22:08:21 +0900 (30eda4c)
@@ -50,8 +50,8 @@ grn_mrb_get_default_system_ruby_scripts_dir(void)
     base_dir = grn_win32_base_dir();
     base_dir_length = strlen(base_dir);
     grn_strcpy(win32_ruby_scripts_dir_buffer, PATH_MAX, base_dir);
-    strcat(win32_ruby_scripts_dir_buffer, "/");
-    strcat(win32_ruby_scripts_dir_buffer, relative_path);
+    grn_strcat(win32_ruby_scripts_dir_buffer, PATH_MAX, "/");
+    grn_strcat(win32_ruby_scripts_dir_buffer, PATH_MAX, relative_path);
     win32_ruby_scripts_dir = win32_ruby_scripts_dir_buffer;
   }
   return win32_ruby_scripts_dir;
@@ -106,14 +106,14 @@ grn_mrb_expand_script_path(grn_ctx *ctx, const char *path,
     expanded_path[0] = '\0';
   } else if (path[0] == '.' && path[1] == '/') {
     grn_strcpy(expanded_path, expanded_path_size, ctx->impl->mrb.base_directory);
-    strcat(expanded_path, "/");
+    grn_strcat(expanded_path, expanded_path_size, "/");
   } else {
     ruby_scripts_dir = grn_mrb_get_system_ruby_scripts_dir(ctx);
     grn_strcpy(expanded_path, expanded_path_size, ruby_scripts_dir);
 
     dir_last_char = ruby_scripts_dir[strlen(expanded_path) - 1];
     if (dir_last_char != '/') {
-      strcat(expanded_path, "/");
+      grn_strcat(expanded_path, expanded_path_size, "/");
     }
   }
 
@@ -127,7 +127,7 @@ grn_mrb_expand_script_path(grn_ctx *ctx, const char *path,
     return GRN_FALSE;
   }
 
-  strcat(expanded_path, path);
+  grn_strcat(expanded_path, expanded_path_size, path);
 
   return GRN_TRUE;
 }

  Modified: lib/plugin.c (+9 -9)
===================================================================
--- lib/plugin.c    2015-04-18 21:59:09 +0900 (0476d6d)
+++ lib/plugin.c    2015-04-18 22:08:21 +0900 (48ccded)
@@ -495,8 +495,8 @@ grn_plugin_get_default_system_plugins_dir(void)
     base_dir = grn_win32_base_dir();
     base_dir_length = strlen(base_dir);
     grn_strcpy(win32_plugins_dir_buffer, PATH_MAX, base_dir);
-    strcat(win32_plugins_dir_buffer, "/");
-    strcat(win32_plugins_dir_buffer, relative_path);
+    grn_strcat(win32_plugins_dir_buffer, PATH_MAX, "/");
+    grn_strcat(win32_plugins_dir_buffer, PATH_MAX, relative_path);
     win32_plugins_dir = win32_plugins_dir_buffer;
   }
   return win32_plugins_dir;
@@ -563,7 +563,7 @@ grn_plugin_find_path_mrb(grn_ctx *ctx, const char *path, size_t path_len)
   }
 
   grn_strcpy(mrb_path, PATH_MAX, path);
-  strcat(mrb_path, mrb_suffix);
+  grn_strcat(mrb_path, PATH_MAX, mrb_suffix);
   return grn_plugin_find_path_raw(ctx, mrb_path);
 }
 #else /* GRN_WITH_MRUBY */
@@ -591,7 +591,7 @@ grn_plugin_find_path_so(grn_ctx *ctx, const char *path, size_t path_len)
   }
 
   grn_strcpy(so_path, PATH_MAX, path);
-  strcat(so_path, so_suffix);
+  grn_strcat(so_path, PATH_MAX, so_suffix);
   return grn_plugin_find_path_raw(ctx, so_path);
 }
 
@@ -624,9 +624,9 @@ grn_plugin_find_path_libs_so(grn_ctx *ctx, const char *path, size_t path_len)
 
   libs_so_path[0] = '\0';
   grn_strncat(libs_so_path, PATH_MAX, path, base_name - path);
-  strcat(libs_so_path, libs_path);
-  strcat(libs_so_path, base_name);
-  strcat(libs_so_path, so_suffix);
+  grn_strcat(libs_so_path, PATH_MAX, libs_path);
+  grn_strcat(libs_so_path, PATH_MAX, base_name);
+  grn_strcat(libs_so_path, PATH_MAX, so_suffix);
   return grn_plugin_find_path_raw(ctx, libs_so_path);
 }
 
@@ -649,7 +649,7 @@ grn_plugin_find_path(grn_ctx *ctx, const char *name)
 
     dir_last_char = plugins_dir[strlen(path) - 1];
     if (dir_last_char != '/') {
-      strcat(path, "/");
+      grn_strcat(path, PATH_MAX, "/");
     }
   }
 
@@ -662,7 +662,7 @@ grn_plugin_find_path(grn_ctx *ctx, const char *name)
         path, name);
     goto exit;
   }
-  strcat(path, name);
+  grn_strcat(path, PATH_MAX, name);
 
   found_path = grn_plugin_find_path_raw(ctx, path);
   if (found_path) {

  Modified: lib/proc.c (+3 -3)
===================================================================
--- lib/proc.c    2015-04-18 21:59:09 +0900 (5b4f428)
+++ lib/proc.c    2015-04-18 22:08:21 +0900 (549c5b2)
@@ -2730,10 +2730,10 @@ dump_plugins(grn_ctx *ctx, grn_obj *outbuf)
       start_libs = strstr(relative_path, libs_path);
       if (start_libs) {
         grn_strncat(name, PATH_MAX, relative_path, start_libs - relative_path);
-        strcat(name, "/");
-        strcat(name, start_libs + strlen(libs_path));
+        grn_strcat(name, PATH_MAX, "/");
+        grn_strcat(name, PATH_MAX, start_libs + strlen(libs_path));
       } else {
-        strcat(name, relative_path);
+        grn_strcat(name, PATH_MAX, relative_path);
       }
       if (strlen(name) > strlen(native_plugin_suffix) &&
           strcmp(name + strlen(name) - strlen(native_plugin_suffix),

  Modified: plugins/query_expanders/tsv.c (+2 -2)
===================================================================
--- plugins/query_expanders/tsv.c    2015-04-18 21:59:09 +0900 (197f3d1)
+++ plugins/query_expanders/tsv.c    2015-04-18 22:08:21 +0900 (06bb322)
@@ -53,8 +53,8 @@ get_system_synonyms_file(void)
     base_dir = grn_plugin_win32_base_dir();
     base_dir_length = strlen(base_dir);
     grn_strcpy(win32_synonyms_file, MAX_PATH, base_dir);
-    strcat(win32_synonyms_file, "/");
-    strcat(win32_synonyms_file, relative_path);
+    grn_strcat(win32_synonyms_file, MAX_PATH, "/");
+    grn_strcat(win32_synonyms_file, MAX_PATH, relative_path);
   }
   return win32_synonyms_file;
 }

  Modified: src/groonga.c (+4 -3)
===================================================================
--- src/groonga.c    2015-04-18 21:59:09 +0900 (667e699)
+++ src/groonga.c    2015-04-18 22:08:21 +0900 (7ed9b38)
@@ -143,7 +143,7 @@ line_editor_init(int argc __attribute__((unused)), char *argv[])
 
   if (strlen(HOME_PATH) + strlen(HISTORY_PATH) < PATH_MAX) {
     grn_strcpy(line_editor_history_path, PATH_MAX, HOME_PATH);
-    strcat(line_editor_history_path, HISTORY_PATH);
+    grn_strcat(line_editor_history_path, PATH_MAX, HISTORY_PATH);
   } else {
     line_editor_history_path[0] = '\0';
   }
@@ -2439,8 +2439,9 @@ init_default_settings(void)
       fprintf(stderr, "can't use default root: too long path\n");
     } else {
       grn_strcpy(win32_default_document_root, PATH_MAX, grn_win32_base_dir());
-      strcat(win32_default_document_root, "/");
-      strcat(win32_default_document_root, GRN_DEFAULT_RELATIVE_DOCUMENT_ROOT);
+      grn_strcat(win32_default_document_root, PATH_MAX, "/");
+      grn_strcat(win32_default_document_root, PATH_MAX,
+                 GRN_DEFAULT_RELATIVE_DOCUMENT_ROOT);
       default_document_root = win32_default_document_root;
     }
   }

  Modified: src/groonga_benchmark.c (+43 -43)
===================================================================
--- src/groonga_benchmark.c    2015-04-18 21:59:09 +0900 (732e212)
+++ src/groonga_benchmark.c    2015-04-18 22:08:21 +0900 (656984a)
@@ -1115,7 +1115,7 @@ exit:
               job->max,
               job->qnum);
       if (grntest_jobdone < grntest_jobnum) {
-        strcat(tmpbuf, ",");
+        grn_strcat(tmpbuf, BUF_LEN, ",");
       }
     }
     GRN_TEXT_PUTS(ctx, log, tmpbuf);
@@ -1261,19 +1261,19 @@ get_sysinfo(const char *path, char *result, int olen)
   if (grntest_outtype == OUT_TSV) {
     result[0] = '\0';
     sprintf(tmpbuf, "script\t%s\n", grntest_scriptname);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
     sprintf(tmpbuf, "user\t%s\n", grntest_username);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
     sprintf(tmpbuf, "date\t%s\n", grntest_date);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
   } else {
     grn_strcpy(result, olen, "{");
     sprintf(tmpbuf, "\"script\": \"%s.scr\",\n", grntest_scriptname);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
     sprintf(tmpbuf, "  \"user\": \"%s\",\n", grntest_username);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
     sprintf(tmpbuf, "  \"date\": \"%s\",\n", grntest_date);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
   }
 
   memset(cpustring, 0, 64);
@@ -1294,7 +1294,7 @@ get_sysinfo(const char *path, char *result, int olen)
   } else {
     sprintf(tmpbuf, "  \"CPU\": \"%s\",\n", cpustring);
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   if (sizeof(int *) == 8) {
     grntest_osinfo = OS_WINDOWS64;
@@ -1311,7 +1311,7 @@ get_sysinfo(const char *path, char *result, int olen)
       sprintf(tmpbuf, "  \"BIT\": 32,\n");
     }
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   GetSystemInfo(&sinfo);
   if (grntest_outtype == OUT_TSV) {
@@ -1319,7 +1319,7 @@ get_sysinfo(const char *path, char *result, int olen)
   } else {
     sprintf(tmpbuf, "  \"CORE\": %lu,\n", sinfo.dwNumberOfProcessors);
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   minfo.dwLength = sizeof(MEMORYSTATUSEX);
   GlobalMemoryStatusEx(&minfo);
@@ -1328,7 +1328,7 @@ get_sysinfo(const char *path, char *result, int olen)
   } else {
     sprintf(tmpbuf, "  \"RAM\": \"%I64dMByte\",\n", minfo.ullTotalPhys/(1024*1024));
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   GetDiskFreeSpaceEx(NULL, NULL, &dinfo, NULL);
   if (grntest_outtype == OUT_TSV) {
@@ -1336,7 +1336,7 @@ get_sysinfo(const char *path, char *result, int olen)
   } else {
     sprintf(tmpbuf, "  \"HDD\": \"%I64dKBytes\",\n", dinfo.QuadPart/1024 );
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osinfo);
   if (grntest_outtype == OUT_TSV) {
@@ -1346,21 +1346,21 @@ get_sysinfo(const char *path, char *result, int olen)
     sprintf(tmpbuf, "  \"OS\": \"Windows %lu.%lu\",\n", osinfo.dwMajorVersion,
             osinfo.dwMinorVersion);
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   if (grntest_outtype == OUT_TSV) {
     sprintf(tmpbuf, "%s\n", grntest_serverhost);
   } else {
     sprintf(tmpbuf, "  \"HOST\": \"%s\",\n", grntest_serverhost);
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   if (grntest_outtype == OUT_TSV) {
     sprintf(tmpbuf, "%d\n", grntest_serverport);
   } else {
     sprintf(tmpbuf, "  \"PORT\": \"%d\",\n", grntest_serverport);
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   if (grntest_outtype == OUT_TSV) {
     sprintf(tmpbuf, "%s\"\n", grn_get_version());
@@ -1368,9 +1368,9 @@ get_sysinfo(const char *path, char *result, int olen)
     sprintf(tmpbuf, "  \"VERSION\": \"%s\"\n", grn_get_version());
   }
 
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
   if (grntest_outtype != OUT_TSV) {
-    strcat(result, "}");
+    grn_strcat(result, olen, "}");
   }
 
 #else /* linux only */
@@ -1388,19 +1388,19 @@ get_sysinfo(const char *path, char *result, int olen)
   if (grntest_outtype == OUT_TSV) {
     result[0] = '\0';
     sprintf(tmpbuf, "sctipt\t%s\n", grntest_scriptname);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
     sprintf(tmpbuf, "user\t%s\n", grntest_username);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
     sprintf(tmpbuf, "date\t%s\n", grntest_date);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
   } else {
     grn_strcpy(result, olen, "{");
     sprintf(tmpbuf, "\"script\": \"%s.scr\",\n", grntest_scriptname);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
     sprintf(tmpbuf, "  \"user\": \"%s\",\n", grntest_username);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
     sprintf(tmpbuf, "  \"date\": \"%s\",\n", grntest_date);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
   }
 
   fp = fopen("/proc/cpuinfo", "r");
@@ -1424,7 +1424,7 @@ get_sysinfo(const char *path, char *result, int olen)
   } else {
     sprintf(tmpbuf, "  \"CPU\": \"%s\",\n", cpu_string);
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   if (sizeof(int *) == 8) {
     grntest_osinfo = OS_LINUX64;
@@ -1441,14 +1441,14 @@ get_sysinfo(const char *path, char *result, int olen)
       sprintf(tmpbuf, "  \"BIT\": 32,\n");
     }
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   if (grntest_outtype == OUT_TSV) {
     sprintf(tmpbuf, "CORE\t%d\n", cpunum);
   } else {
     sprintf(tmpbuf, "  \"CORE\": %d,\n", cpunum);
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   fp = fopen("/proc/meminfo", "r");
   if (!fp) {
@@ -1470,18 +1470,18 @@ get_sysinfo(const char *path, char *result, int olen)
   fclose(fp);
   if (grntest_outtype == OUT_TSV) {
     sprintf(tmpbuf, "%dMBytes\n", minfo/1024);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
     sprintf(tmpbuf, "%dMBytes_Unevictable\n", unevictable/1024);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
     sprintf(tmpbuf, "%dMBytes_Mlocked\n", mlocked/1024);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
   } else {
     sprintf(tmpbuf, "  \"RAM\": \"%dMBytes\",\n", minfo/1024);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
     sprintf(tmpbuf, "  \"Unevictable\": \"%dMBytes\",\n", unevictable/1024);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
     sprintf(tmpbuf, "  \"Mlocked\": \"%dMBytes\",\n", mlocked/1024);
-    strcat(result, tmpbuf);
+    grn_strcat(result, olen, tmpbuf);
   }
 
   ret = statvfs(path, &vfsbuf);
@@ -1497,7 +1497,7 @@ get_sysinfo(const char *path, char *result, int olen)
             "  \"HDD\": \"%" GRN_FMT_INT64U "KBytes\",\n",
             vfsbuf.f_blocks * 4);
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   uname(&ubuf);
   if (grntest_outtype == OUT_TSV) {
@@ -1505,31 +1505,31 @@ get_sysinfo(const char *path, char *result, int olen)
   } else {
     sprintf(tmpbuf, "  \"OS\": \"%s %s\",\n", ubuf.sysname, ubuf.release);
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   if (grntest_outtype == OUT_TSV) {
     sprintf(tmpbuf, "%s\n", grntest_serverhost);
   } else {
     sprintf(tmpbuf, "  \"HOST\": \"%s\",\n", grntest_serverhost);
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   if (grntest_outtype == OUT_TSV) {
     sprintf(tmpbuf, "%d\n", grntest_serverport);
   } else {
     sprintf(tmpbuf, "  \"PORT\": \"%d\",\n", grntest_serverport);
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   if (grntest_outtype == OUT_TSV) {
     sprintf(tmpbuf, "%s\n", grn_get_version());
   } else {
     sprintf(tmpbuf, "  \"VERSION\": \"%s\"\n", grn_get_version());
   }
-  strcat(result, tmpbuf);
+  grn_strcat(result, olen, tmpbuf);
 
   if (grntest_outtype != OUT_TSV) {
-    strcat(result, "},");
+    grn_strcat(result, olen, "},");
   }
 #endif /* WIN32 */
   if (strlen(result) >= olen) {
@@ -1555,12 +1555,12 @@ start_server(const char *dbpath, int r)
   }
 
   grn_strcpy(tmpbuf, BUF_LEN, groonga_path);
-  strcat(tmpbuf, " -s --protocol ");
-  strcat(tmpbuf, groonga_protocol);
-  strcat(tmpbuf, " -p ");
+  grn_strcat(tmpbuf, BUF_LEN, " -s --protocol ");
+  grn_strcat(tmpbuf, BUF_LEN, groonga_protocol);
+  grn_strcat(tmpbuf, BUF_LEN, " -p ");
   sprintf(optbuf, "%d ", grntest_serverport);
-  strcat(tmpbuf, optbuf);
-  strcat(tmpbuf, dbpath);
+  grn_strcat(tmpbuf, BUF_LEN, optbuf);
+  grn_strcat(tmpbuf, BUF_LEN, dbpath);
   memset(&si, 0, sizeof(STARTUPINFO));
   si.cb=sizeof(STARTUPINFO);
   ret = CreateProcess(NULL, tmpbuf, NULL, NULL, FALSE,
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index