Author: cazfi Date: Sat Apr 16 22:53:10 2016 New Revision: 32422 URL: http://svn.gna.org/viewcvs/freeciv?rev=32422&view=rev Log: Use "\" as directory separator on Windows builds
See patch #7026 Modified: branches/S2_6/client/options.c branches/S2_6/configure.ac branches/S2_6/server/gamehand.c branches/S2_6/utility/shared.c Modified: branches/S2_6/client/options.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/options.c?rev=32422&r1=32421&r2=32422&view=diff ============================================================================== --- branches/S2_6/client/options.c (original) +++ branches/S2_6/client/options.c Sat Apr 16 22:53:10 2016 @@ -4808,6 +4808,17 @@ } } +#ifndef DIR_SEPARATOR +#if defined(WIN32_NATIVE) || defined(_WIN32) || defined(__WIN32__) || defined(__EMX__) || defined(__DJGPP__) + /* Win32, OS/2, DOS */ +# define DIR_SEPARATOR "\\" +# define DIR_SEPARATOR_CHAR '\\' +#else + /* Unix */ +# define DIR_SEPARATOR "/" +# define DIR_SEPARATOR_CHAR '/' +#endif +#endif /* Old rc file name. */ #define OLD_OPTION_FILE_NAME ".civclientrc" @@ -4860,8 +4871,8 @@ return NULL; } fc_snprintf(name_buffer, sizeof(name_buffer), - "%s/.freeciv/" NEW_OPTION_FILE_NAME, name, - MAJOR_NEW_OPTION_FILE_NAME, MINOR_NEW_OPTION_FILE_NAME); + "%s" DIR_SEPARATOR ".freeciv" DIR_SEPARATOR NEW_OPTION_FILE_NAME, + name, MAJOR_NEW_OPTION_FILE_NAME, MINOR_NEW_OPTION_FILE_NAME); #endif /* OPTION_FILE_NAME */ } log_verbose("settings file is %s", name_buffer); @@ -4911,7 +4922,8 @@ ? minor >= FIRST_MINOR_NEW_OPTION_FILE_NAME : minor >= 0); minor--) { fc_snprintf(name_buffer, sizeof(name_buffer), - "%s/.freeciv/" NEW_OPTION_FILE_NAME, name, major, minor); + "%s" DIR_SEPARATOR ".freeciv" DIR_SEPARATOR NEW_OPTION_FILE_NAME, + name, major, minor); if (0 == fc_stat(name_buffer, &buf)) { if (MAJOR_NEW_OPTION_FILE_NAME != major || MINOR_NEW_OPTION_FILE_NAME != minor) { @@ -4935,7 +4947,7 @@ minor >= FIRST_MINOR_MID_OPTION_FILE_NAME ; minor--) { fc_snprintf(name_buffer, sizeof(name_buffer), - "%s/" MID_OPTION_FILE_NAME, name, major, minor); + "%s" DIR_SEPARATOR MID_OPTION_FILE_NAME, name, major, minor); if (0 == fc_stat(name_buffer, &buf)) { log_normal(_("Didn't find '%s' option file, " "loading from '%s' instead."), @@ -4951,7 +4963,7 @@ /* Try with the old one. */ fc_snprintf(name_buffer, sizeof(name_buffer), - "%s/" OLD_OPTION_FILE_NAME, name); + "%s" DIR_SEPARATOR OLD_OPTION_FILE_NAME, name); if (0 == fc_stat(name_buffer, &buf)) { log_normal(_("Didn't find '%s' option file, " "loading from '%s' instead."), Modified: branches/S2_6/configure.ac URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/configure.ac?rev=32422&r1=32421&r2=32422&view=diff ============================================================================== --- branches/S2_6/configure.ac (original) +++ branches/S2_6/configure.ac Sat Apr 16 22:53:10 2016 @@ -676,6 +676,7 @@ dnl Defaults to override with host specific values HOST_PATH_SEPARATOR=":" +HOST_DIR_SEPARATOR="/" dnl Settings specific to host OS case "$host_os" in @@ -688,6 +689,7 @@ fi HOST_PATH_SEPARATOR=";" + HOST_DIR_SEPARATOR="\\" AC_DEFINE([FREECIV_SOCKET_ZERO_NOT_STDIN], [1], [Mingw-specific setting - stdin]) AC_DEFINE([ALWAYS_ROOT], [1], [Can execute program as root - Mingw]) @@ -728,7 +730,7 @@ if test x"$MINGW" != "xyes"; then CPPFLAGS="$CPPFLAGS -DLOCALEDIR=\"\\\"$localedir\\\"\"" else - AC_DEFINE_UNQUOTED([LOCALEDIR], ["./share/locale"], [Locale directory (windows)]) + AC_DEFINE_UNQUOTED([LOCALEDIR], [".\\\\share\\\\locale"], [Locale directory (windows)]) fi CPPFLAGS="$CPPFLAGS -DBINDIR=\"\\\"$bindir\\\"\"" @@ -1169,6 +1171,7 @@ AC_SUBST([VERSION_WITHOUT_LABEL]) AC_SUBST([VERSION_LABEL]) AC_SUBST([HOST_PATH_SEPARATOR]) +AC_SUBST([HOST_DIR_SEPARATOR]) AM_CONDITIONAL(AUDIO_SDL, test "x$SDL_mixer" != "xno") AM_CONDITIONAL(CLIENT_GUI_SDL, test "x$gui_sdl" = "xyes") AM_CONDITIONAL(CLIENT_GUI_SDL2, test "x$gui_sdl2" = "xyes") @@ -1327,15 +1330,15 @@ FC_EXPAND_DIR(FREECIV_DATADIR, "$datadir/freeciv") if test x"$MINGW" = xyes; then - DEFAULT_SAVE_PATH=".;~/.freeciv/saves" + DEFAULT_SAVE_PATH=".;~\\\\\\\\.freeciv\\\\\\\\saves" if test x$crosser = xyes ; then FC_CONF_PATH="../etc/freeciv" DEFAULT_DATA_PATH=".;data;~/.freeciv/$DATASUBDIR;$datadir/freeciv;../share/freeciv" DEFAULT_SCENARIO_PATH=".;data/scenarios;~/.freeciv/$DATASUBDIR/scenarios;~/.freeciv/scenarios;$datadir/freeciv/scenarios;../share/freeciv/scenarios" else - FC_CONF_PATH="etc/freeciv" - DEFAULT_DATA_PATH=".;data;~/.freeciv/$DATASUBDIR;$datadir/freeciv" - DEFAULT_SCENARIO_PATH=".;data/scenarios;~/.freeciv/$DATASUBDIR/scenarios;~/.freeciv/scenarios;$datadir/freeciv/scenarios" + FC_CONF_PATH="etc\\\\\\\\freeciv" + DEFAULT_DATA_PATH=".;data;~\\\\\\\\.freeciv\\\\\\\\$DATASUBDIR;$datadir\\\\\\\\freeciv" + DEFAULT_SCENARIO_PATH=".;data\\\\\\\\scenarios;~\\\\\\\\.freeciv\\\\\\\\$DATASUBDIR\\\\\\\\scenarios;~\\\\\\\\.freeciv\\\\\\\\scenarios;$datadir\\\\\\\\freeciv\\\\\\\\scenarios" fi else FC_CONF_PATH="$sysconfdir/freeciv" Modified: branches/S2_6/server/gamehand.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/gamehand.c?rev=32422&r1=32421&r2=32422&view=diff ============================================================================== --- branches/S2_6/server/gamehand.c (original) +++ branches/S2_6/server/gamehand.c Sat Apr 16 22:53:10 2016 @@ -53,6 +53,17 @@ #define CHALLENGE_ROOT "challenge" +#ifndef DIR_SEPARATOR +#if defined(WIN32_NATIVE) || defined(_WIN32) || defined(__WIN32__) || defined(__EMX__) || defined(__DJGPP__) + /* Win32, OS/2, DOS */ +# define DIR_SEPARATOR "\\" +# define DIR_SEPARATOR_CHAR '\\' +#else + /* Unix */ +# define DIR_SEPARATOR "/" +# define DIR_SEPARATOR_CHAR '/' +#endif +#endif #define SPECLIST_TAG startpos #define SPECLIST_TYPE struct startpos @@ -1026,7 +1037,7 @@ { static char fullname[MAX_LEN_PATH]; - interpret_tilde(fullname, sizeof(fullname), "~/.freeciv/"); + interpret_tilde(fullname, sizeof(fullname), "~" DIR_SEPARATOR ".freeciv" DIR_SEPARATOR); sz_strlcat(fullname, get_challenge_filename(pc)); return fullname; Modified: branches/S2_6/utility/shared.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/utility/shared.c?rev=32422&r1=32421&r2=32422&view=diff ============================================================================== --- branches/S2_6/utility/shared.c (original) +++ branches/S2_6/utility/shared.c Sat Apr 16 22:53:10 2016 @@ -79,24 +79,36 @@ #endif #endif +#ifndef DIR_SEPARATOR +#if defined(WIN32_NATIVE) || defined(_WIN32) || defined(__WIN32__) || defined(__EMX__) || defined(__DJGPP__) + /* Win32, OS/2, DOS */ +# define DIR_SEPARATOR "\\" +# define DIR_SEPARATOR_CHAR '\\' +#else + /* Unix */ +# define DIR_SEPARATOR "/" +# define DIR_SEPARATOR_CHAR '/' +#endif +#endif + #define PARENT_DIR_OPERATOR ".." /* If no default data path is defined use the default default one */ #ifndef DEFAULT_DATA_PATH #define DEFAULT_DATA_PATH "." PATH_SEPARATOR \ "data" PATH_SEPARATOR \ - "~/.freeciv/" DATASUBDIR + "~" DIR_SEPARATOR ".freeciv" DIR_SEPARATOR DATASUBDIR #endif #ifndef DEFAULT_SAVE_PATH #define DEFAULT_SAVE_PATH "." PATH_SEPARATOR \ - "~/.freeciv/saves" + "~" DIR_SEPARATOR ".freeciv" DIR_SEPARATOR "saves" #endif #ifndef DEFAULT_SCENARIO_PATH #define DEFAULT_SCENARIO_PATH \ "." PATH_SEPARATOR \ - "data/scenarios" PATH_SEPARATOR \ - "~/.freeciv/" DATASUBDIR "/scenarios" PATH_SEPARATOR \ - "~/.freeciv/scenarios" + "data" DIR_SEPARATOR "scenarios" PATH_SEPARATOR \ + "~" DIR_SEPARATOR ".freeciv" DIR_SEPARATOR DATASUBDIR DIR_SEPARATOR "scenarios" PATH_SEPARATOR \ + "~" DIR_SEPARATOR ".freeciv" DIR_SEPARATOR "scenarios" #endif /* DEFAULT_SCENARIO_PATH */ /* environment */ @@ -825,26 +837,17 @@ LPMALLOC pMalloc; if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &pidl))) { - char *home_dir_in_local_encoding = fc_malloc(PATH_MAX); if (SUCCEEDED(SHGetPathFromIDList(pidl, home_dir_in_local_encoding))) { - /* convert to internal encoding */ - home_dir = local_to_internal_string_malloc(home_dir_in_local_encoding); - free(home_dir_in_local_encoding); - - /* replace backslashes with forward slashes */ - char *c; - for (c = home_dir; *c != 0; c++) { - if (*c == '\\') { - *c = '/'; - } - } + /* convert to internal encoding */ + home_dir = local_to_internal_string_malloc(home_dir_in_local_encoding); + free(home_dir_in_local_encoding); } else { - free(home_dir_in_local_encoding); - home_dir = NULL; - log_error("Could not find home directory " - "(SHGetPathFromIDList() failed)."); + free(home_dir_in_local_encoding); + home_dir = NULL; + log_error("Could not find home directory " + "(SHGetPathFromIDList() failed)."); } SHGetMalloc(&pMalloc); @@ -966,15 +969,15 @@ tok = skip_leading_spaces(tok); remove_trailing_spaces(tok); - if (strcmp(tok, "/") != 0) { - remove_trailing_char(tok, '/'); + if (strcmp(tok, DIR_SEPARATOR) != 0) { + remove_trailing_char(tok, DIR_SEPARATOR_CHAR); } i = strlen(tok); if (tok[0] == '~') { - if (i > 1 && tok[1] != '/') { + if (i > 1 && tok[1] != DIR_SEPARATOR_CHAR) { log_error("For \"%s\" in path cannot expand '~'" - " except as '~/'; ignoring", tok); + " except as '~" DIR_SEPARATOR "'; ignoring", tok); i = 0; /* skip this one */ } else { char *home = user_home_dir(); @@ -1225,7 +1228,7 @@ struct strvec *files = strvec_new(); size_t suffix_len = strlen(suffix); - fc_assert_ret_val(!strchr(suffix, '/'), NULL); + fc_assert_ret_val(!strchr(suffix, DIR_SEPARATOR_CHAR), NULL); if (NULL == dirs) { return files; @@ -1296,6 +1299,13 @@ ***************************************************************************/ const char *fileinfoname(const struct strvec *dirs, const char *filename) { +#ifdef WIN32_NATIVE + char fnbuf[strlen(filename) + 1]; + int i; +#else /* WIN32_NATIVE */ + const char *fnbuf = filename; +#endif /* WIN32_NATIVE */ + if (NULL == dirs) { return NULL; } @@ -1316,10 +1326,21 @@ return astr_str(&realfile); } +#ifdef WIN32_NATIVE + for (i = 0; filename[i] != '\0'; i++) { + if (filename[i] == '/') { + fnbuf[i] = DIR_SEPARATOR_CHAR; + } else { + fnbuf[i] = filename[i]; + } + } + fnbuf[i] = '\0'; +#endif /* WIN32_NATIVE */ + strvec_iterate(dirs, dirname) { struct stat buf; /* see if we can open the file or directory */ - astr_set(&realfile, "%s/%s", dirname, filename); + astr_set(&realfile, "%s" DIR_SEPARATOR "%s", dirname, fnbuf); if (fc_stat(astr_str(&realfile), &buf) == 0) { return astr_str(&realfile); } @@ -1853,8 +1874,8 @@ ***************************************************************************/ void interpret_tilde(char* buf, size_t buf_size, const char* filename) { - if (filename[0] == '~' && filename[1] == '/') { - fc_snprintf(buf, buf_size, "%s/%s", user_home_dir(), filename + 2); + if (filename[0] == '~' && filename[1] == DIR_SEPARATOR_CHAR) { + fc_snprintf(buf, buf_size, "%s" DIR_SEPARATOR "%s", user_home_dir(), filename + 2); } else if (filename[0] == '~' && filename[1] == '\0') { strncpy(buf, user_home_dir(), buf_size); } else { @@ -1870,7 +1891,7 @@ ***************************************************************************/ char *interpret_tilde_alloc(const char* filename) { - if (filename[0] == '~' && filename[1] == '/') { + if (filename[0] == '~' && filename[1] == DIR_SEPARATOR_CHAR) { const char *home = user_home_dir(); size_t sz; char *buf; @@ -1897,7 +1918,7 @@ fc_assert_ret_val(NULL != filepath, NULL); for (j = strlen(filepath); j >= 0; j--) { - if (filepath[j] == '/') { + if (filepath[j] == DIR_SEPARATOR_CHAR) { return &filepath[j+1]; } } @@ -1916,7 +1937,7 @@ path = interpret_tilde_alloc(pathname); dir = path; do { - dir = strchr(dir, '/'); + dir = strchr(dir, DIR_SEPARATOR_CHAR); /* We set the current / with 0, and restore it afterwards */ if (dir) { *dir = 0; @@ -1931,7 +1952,7 @@ #endif if (dir) { - *dir = '/'; + *dir = DIR_SEPARATOR_CHAR; dir++; } } while (dir); _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits