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