]> git.street.me.uk Git - andy/viking.git/commitdiff
g_*ify maps_layer_default_dir function and code related to maps cache
authorGuilhem Bonnefille <guilhem.bonnefille@gmail.com>
Fri, 7 Sep 2007 20:48:06 +0000 (20:48 +0000)
committerGuilhem Bonnefille <guilhem.bonnefille@gmail.com>
Fri, 7 Sep 2007 20:48:06 +0000 (20:48 +0000)
src/globals.h
src/vikmapslayer.c
src/vikwindow.c

index 6a89f0d87da8d1ac99dfedd54df54d3b6ae01490..fe2ae92b36498dba03f5607aa39dfb5016e7e56d 100644 (file)
 
 #ifdef WINDOWS
 #define access(a,b) _access(a,b)
-#define VIKING_FILE_SEP '\\'
 #else
 #include <unistd.h>
-#define VIKING_FILE_SEP '/'
 #define UNIX_WEB_BROWSER "galeon"
 #endif
 
index 814f82d2b36a18dc7accdbdcbe56666e5e7fd88a..2d5ed4a5eb53e5df21163de7dff283a53380eee2 100644 (file)
@@ -239,42 +239,44 @@ gchar *vik_maps_layer_get_map_label(VikMapsLayer *vml)
 /******** CACHE DIR STUFF ***************/
 /****************************************/
 
+#define DIRSTRUCTURE "%st%ds%dz%d" G_DIR_SEPARATOR_S "%d" G_DIR_SEPARATOR_S "%d"
 #ifdef WINDOWS
 #define MAPS_CACHE_DIR "C:\\VIKING-MAPS\\"
-#define DIRSTRUCTURE "%st%ds%dz%d\\%d\\%d"
 #else /* POSIX */
 
 #include <stdlib.h>
 
 #define MAPS_CACHE_DIR maps_layer_default_dir()
 #define GLOBAL_MAPS_DIR "/var/cache/maps/"
-#define DIRSTRUCTURE "%st%ds%dz%d/%d/%d"
 
 static gchar *maps_layer_default_dir ()
 {
-  static gchar defaultdir[512];
-  static gboolean already_run = 0;
-  if ( ! already_run )
+  static gchar *defaultdir = NULL;
+  if ( ! defaultdir )
   {
     /* Thanks to Mike Davison for the $VIKING_MAPS usage */
-    gchar *mapdir = getenv("VIKING_MAPS");
-    if ( mapdir && strlen(mapdir) < 497 ) {
-      strcpy ( defaultdir, mapdir );
+    const gchar *mapdir = g_getenv("VIKING_MAPS");
+    if ( mapdir ) {
+      defaultdir = g_strdup ( mapdir );
     } else if ( access ( GLOBAL_MAPS_DIR, W_OK ) == 0 ) {
-      strcpy ( defaultdir, GLOBAL_MAPS_DIR );
+      defaultdir = g_strdup ( GLOBAL_MAPS_DIR );
     } else {
-      gchar *home = getenv("HOME");
-      if ( home && strlen(home) < 497 )
-      {
-        strcpy ( defaultdir, home );
-        strcat ( defaultdir, "/.viking-maps/" );
-      }
+      const gchar *home = g_getenv("HOME");
+      if (!home || access(home, W_OK))
+        home = g_get_home_dir ();
+      if ( home )
+        defaultdir = g_build_filename ( home, ".viking-maps", NULL );
       else
-      {
-        strcpy ( defaultdir, ".viking-maps/" );
-      }
+        defaultdir = g_strdup ( ".viking-maps" );
+    }
+    if (defaultdir && (defaultdir[strlen(defaultdir)-1] != G_DIR_SEPARATOR))
+    {
+      /* Add the separator at the end */
+      gchar *tmp = defaultdir;
+      defaultdir = g_strconcat(tmp, G_DIR_SEPARATOR_S, NULL);
+      g_free(tmp);
     }
-    already_run = 1;
+    g_debug("%s: defaultdir=%s", __FUNCTION__, defaultdir);
   }
   return defaultdir;
 }
@@ -305,11 +307,11 @@ static void maps_layer_set_cache_dir ( VikMapsLayer *vml, const gchar *dir )
   else
   {
     len = strlen(dir);
-    if ( dir[len-1] != VIKING_FILE_SEP )
+    if ( dir[len-1] != G_DIR_SEPARATOR )
     {
       vml->cache_dir = g_malloc ( len+2 );
       strncpy ( vml->cache_dir, dir, len );
-      vml->cache_dir[len] = VIKING_FILE_SEP;
+      vml->cache_dir[len] = G_DIR_SEPARATOR;
       vml->cache_dir[len+1] = '\0';
     }
     else
index e48584bbc28005e29c841c352fa570b627ee7c02..0873b826b6103061d3fe6781adeb34d0aad49ff6 100644 (file)
@@ -1304,7 +1304,7 @@ static void save_image_dir ( VikWindow *vw, const gchar *fn, guint w, guint h, g
   {
     for ( x = 1; x <= tiles_w; x++ )
     {
-      g_snprintf ( name_of_file, size, "%s%cy%d-x%d.%s", fn, VIKING_FILE_SEP, y, x, save_as_png ? "png" : "jpg" );
+      g_snprintf ( name_of_file, size, "%s%cy%d-x%d.%s", fn, G_DIR_SEPARATOR, y, x, save_as_png ? "png" : "jpg" );
       utm = utm_orig;
       if ( tiles_w & 0x1 )
         utm.easting += ((gdouble)x - ceil(((gdouble)tiles_w)/2)) * (w*zoom);