]> git.street.me.uk Git - andy/viking.git/blame - src/dir.c
Set the generate image file filter according to the file type selected.
[andy/viking.git] / src / dir.c
CommitLineData
29f1598c
GB
1/*
2 * viking -- GPS Data and Topo Analyzer, Explorer, and Manager
3 *
4 * Copyright (C) 2003-2005, Evan Battaglia <gtoevan@gmx.net>
5 * Copyright (C) 2012, Guilhem Bonnefille <guilhem.bonnefille@gmail.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 *
21 */
22
23#ifdef HAVE_CONFIG_H
24#include "config.h"
25#endif
26#include "viking.h"
27
28#include <stdlib.h>
29#ifdef HAVE_UNISTD_H
30#include <unistd.h>
31#endif
32#include <glib.h>
33#include <glib/gstdio.h>
34
35const gchar *a_get_viking_dir()
36{
37 static gchar *viking_dir = NULL;
38
39 // TODO: use g_get_user_config_dir ?
40
41 if (!viking_dir) {
42 const gchar *home = g_getenv("HOME");
43 if (!home || g_access(home, W_OK))
44 home = g_get_home_dir ();
45#ifdef HAVE_MKDTEMP
46 if (!home || g_access(home, W_OK))
47 {
48 static gchar temp[] = {"/tmp/vikXXXXXX"};
49 home = mkdtemp(temp);
50 }
51#endif
52 if (!home || g_access(home, W_OK))
53 /* Fatal error */
54 g_critical("Unable to find a base directory");
55
56 /* Build the name of the directory */
57#ifdef __APPLE__
58 viking_dir = g_build_filename(home, "/Library/Application Support/Viking", NULL);
59#else
60 viking_dir = g_build_filename(home, ".viking", NULL);
61#endif
62 if (g_file_test(viking_dir, G_FILE_TEST_EXISTS) == FALSE)
63 g_mkdir(viking_dir, 0755);
64 }
65
66 return viking_dir;
67}
68
69/**
70 * a_get_viking_data_home:
71 *
72 * Retrieves the XDG compliant user's data directory.
73 *
74 * Retuns: the directory (can be NULL). Should be freed with g_free.
75 */
76gchar *
77a_get_viking_data_home()
78{
79 const gchar *xdg_data_home = g_getenv("XDG_DATA_HOME");
80 if (xdg_data_home)
81 {
37fe180a 82 return g_build_filename(xdg_data_home, PACKAGE, NULL);
29f1598c
GB
83 }
84 else
85 {
86 return NULL;
87 }
88}
89
90/**
91 * a_get_viking_data_path:
92 *
93 * Retrieves the configuration path.
94 *
95 * Returns: list of directories to scan for data. Should be freed with g_strfreev.
96 */
97gchar **
98a_get_viking_data_path()
99{
100 const gchar *xdg_data_dirs = g_getenv("XDG_DATA_DIRS");
101 if (xdg_data_dirs == NULL)
102 {
103 /* Default value specified in
104 http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
105 */
106 xdg_data_dirs = "/usr/local/share/:/usr/share/";
107 }
108 gchar **data_path = g_strsplit(xdg_data_dirs, ":", 0);
109 /* Append the viking dir */
110 gchar **path;
111 for (path = data_path ; *path != NULL ; path++)
112 {
113 gchar *dir = *path;
114 *path = g_build_filename(dir, PACKAGE, NULL);
115 g_free(dir);
116 }
117 return data_path;
118}