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

Reply via email to