const char * grn_windows_base_dir(void) { if (!windows_base_dir) { HMODULE dll; const wchar_t *dll_filename = GRN_DLL_FILENAME; wchar_t absolute_dll_filename[MAX_PATH]; DWORD absolute_dll_filename_size; dll = GetModuleHandleW(dll_filename); absolute_dll_filename_size = GetModuleFileNameW(dll, absolute_dll_filename, MAX_PATH); if (absolute_dll_filename_size == 0) { windows_base_dir = grn_strdup_raw("."); } else { DWORD ansi_dll_filename_size; ansi_dll_filename_size = WideCharToMultiByte(CP_ACP, 0, absolute_dll_filename, absolute_dll_filename_size, NULL, 0, NULL, NULL); if (ansi_dll_filename_size == 0) { windows_base_dir = grn_strdup_raw("."); } else { char *path; windows_base_dir = malloc(ansi_dll_filename_size + 1); WideCharToMultiByte(CP_ACP, 0, absolute_dll_filename, absolute_dll_filename_size, windows_base_dir, ansi_dll_filename_size, NULL, NULL); windows_base_dir[ansi_dll_filename_size] = '\0'; if ((path = strrchr(windows_base_dir, '\\'))) { *path = '\0'; } path = strrchr(windows_base_dir, '\\'); if (path && (grn_strcasecmp(path + 1, "bin") == 0 || grn_strcasecmp(path + 1, "lib") == 0)) { *path = '\0'; } else { path = windows_base_dir + strlen(windows_base_dir); *path = '\0'; } for (path = windows_base_dir; *path; path++) { if (*path == '\\') { *path = '/'; } } } } } return windows_base_dir; }
grn_bool grn_log_level_parse(const char *string, grn_log_level *level) { if (strcmp(string, " ") == 0 || grn_strcasecmp(string, "none") == 0) { *level = GRN_LOG_NONE; return GRN_TRUE; } else if (strcmp(string, "E") == 0 || grn_strcasecmp(string, "emerg") == 0 || grn_strcasecmp(string, "emergency") == 0) { *level = GRN_LOG_EMERG; return GRN_TRUE; } else if (strcmp(string, "A") == 0 || grn_strcasecmp(string, "alert") == 0) { *level = GRN_LOG_ALERT; return GRN_TRUE; } else if (strcmp(string, "C") == 0 || grn_strcasecmp(string, "crit") == 0 || grn_strcasecmp(string, "critical") == 0) { *level = GRN_LOG_CRIT; return GRN_TRUE; } else if (strcmp(string, "e") == 0 || grn_strcasecmp(string, "error") == 0) { *level = GRN_LOG_ERROR; return GRN_TRUE; } else if (strcmp(string, "w") == 0 || grn_strcasecmp(string, "warn") == 0 || grn_strcasecmp(string, "warning") == 0) { *level = GRN_LOG_WARNING; return GRN_TRUE; } else if (strcmp(string, "n") == 0 || grn_strcasecmp(string, "notice") == 0) { *level = GRN_LOG_NOTICE; return GRN_TRUE; } else if (strcmp(string, "i") == 0 || grn_strcasecmp(string, "info") == 0) { *level = GRN_LOG_INFO; return GRN_TRUE; } else if (strcmp(string, "d") == 0 || grn_strcasecmp(string, "debug") == 0) { *level = GRN_LOG_DEBUG; return GRN_TRUE; } else if (strcmp(string, "-") == 0 || grn_strcasecmp(string, "dump") == 0) { *level = GRN_LOG_DUMP; return GRN_TRUE; } else { return GRN_FALSE; } }