From 3d9454e6bf2f57dc1fa5318fe60221cfe193ec4c Mon Sep 17 00:00:00 2001 From: Guilhem Bonnefille Date: Fri, 7 Sep 2007 20:48:06 +0000 Subject: [PATCH] g_*ify maps_layer_default_dir function and code related to maps cache --- src/globals.h | 2 -- src/vikmapslayer.c | 44 +++++++++++++++++++++++--------------------- src/vikwindow.c | 2 +- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/globals.h b/src/globals.h index 6a89f0d8..fe2ae92b 100644 --- a/src/globals.h +++ b/src/globals.h @@ -29,10 +29,8 @@ #ifdef WINDOWS #define access(a,b) _access(a,b) -#define VIKING_FILE_SEP '\\' #else #include -#define VIKING_FILE_SEP '/' #define UNIX_WEB_BROWSER "galeon" #endif diff --git a/src/vikmapslayer.c b/src/vikmapslayer.c index 814f82d2..2d5ed4a5 100644 --- a/src/vikmapslayer.c +++ b/src/vikmapslayer.c @@ -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 #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 diff --git a/src/vikwindow.c b/src/vikwindow.c index e48584bb..0873b826 100644 --- a/src/vikwindow.c +++ b/src/vikwindow.c @@ -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); -- 2.39.5