39#if defined __APPLE__ || defined _POSIX_C_SOURCE >= 1 || defined _XOPEN_SOURCE || defined _BSD_SOURCE \
40 || defined _SVID_SOURCE || defined _POSIX_SOURCE || defined __DragonFly__ || defined __FreeBSD__ \
41 || defined __NetBSD__ || defined __OpenBSD__
46#define HAVE_GETPWNAM_R 1
62void dt_loc_init(
const char *datadir,
const char *moduledir,
const char *localedir,
const char *configdir,
const char *cachedir,
const char *tmpdir,
const char *kerneldir)
65 char* application_directory = NULL;
69 int length = wai_getExecutablePath(NULL, 0, &dirname_length);
72 application_directory = (
char*)malloc(length + 1);
74 wai_getExecutablePath(application_directory, length, &dirname_length);
76 application_directory[dirname_length] =
'\0';
94 if(
IS_NULL_PTR(user) || g_strcmp0(user, g_get_user_name()) == 0)
96 const char *home_dir = g_getenv(
"HOME");
97 return g_strdup((!
IS_NULL_PTR(home_dir)) ? home_dir : g_get_home_dir());
100#if defined HAVE_GETPWNAM_R
104 struct passwd *result;
105#ifdef _SC_GETPW_R_SIZE_MAX
106 int bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
115 gchar *buffer = g_malloc0_n(bufsize,
sizeof(gchar));
121 getpwnam_r(user, &pwd, buffer, bufsize, &result);
128 gchar *dir = g_strdup(pwd.pw_dir);
137gchar *
dt_loc_init_generic(
const char *absolute_value,
const char *application_directory,
const char *default_value)
139 gchar *result = NULL;
150 if(application_directory)
154 gchar complete_path[
PATH_MAX] = { 0 };
155#if defined(__APPLE__)
173 g_snprintf(complete_path,
sizeof(complete_path),
"%s/../Resources%s", application_directory, default_value + 2);
178 g_snprintf(complete_path,
sizeof(complete_path),
"%s/%s", application_directory, default_value);
181 g_snprintf(complete_path,
sizeof(complete_path),
"%s/%s", application_directory, default_value);
183 path = g_strdup(complete_path);
188 path = g_strdup(default_value);
193 if(g_file_test(path, G_FILE_TEST_EXISTS) ==
FALSE) g_mkdir_with_parents(path, 0700);
204 char *default_config_dir = g_build_filename(g_get_user_config_dir(),
"ansel", NULL);
218 char *default_cache_dir = g_build_filename(g_get_user_cache_dir(),
"ansel", NULL);
234 fprintf(stderr,
"directory for %s has not been set.\n", context);
239 wchar_t *wdirectory = g_utf8_to_utf16 (directory, -1, NULL, NULL, NULL);
240 DWORD attribs = GetFileAttributesW(wdirectory);
242 if (attribs != INVALID_FILE_ATTRIBUTES &&
243 (attribs & FILE_ATTRIBUTE_DIRECTORY))
249 fprintf(stderr,
"%s: directory '%s' fails to open.'\n", context, directory);
253 DIR* dir = opendir(directory);
261 fprintf(stderr,
"opendir '%s' fails with: '%s'\n", directory, strerror(errno));
#define DARKTABLE_LOCALEDIR
#define DARKTABLE_KERNELSDIR
#define DARKTABLE_DATADIR
#define DARKTABLE_SHAREDIR
#define DARKTABLE_MODULEDIR
void dt_print(dt_debug_thread_t thread, const char *msg,...)
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
void dt_loc_get_sharedir(char *sharedir, size_t bufsize)
void dt_loc_init_tmp_dir(const char *tmpdir)
void dt_loc_init_moduledir(const char *application_directory, const char *moduledir)
void dt_loc_get_user_cache_dir(char *cachedir, size_t bufsize)
void dt_loc_get_tmp_dir(char *tmpdir, size_t bufsize)
void dt_loc_get_kerneldir(char *kerneldir, size_t bufsize)
void dt_loc_get_datadir(char *datadir, size_t bufsize)
void dt_loc_get_localedir(char *localedir, size_t bufsize)
gchar * dt_loc_init_generic(const char *absolute_value, const char *application_directory, const char *default_value)
void dt_loc_init_datadir(const char *application_directory, const char *datadir)
void dt_loc_init_user_cache_dir(const char *cachedir)
void dt_loc_init(const char *datadir, const char *moduledir, const char *localedir, const char *configdir, const char *cachedir, const char *tmpdir, const char *kerneldir)
void dt_loc_get_moduledir(char *moduledir, size_t bufsize)
void dt_loc_init_kerneldir(const char *application_directory, const char *kerneldir)
void dt_loc_init_localedir(const char *application_directory, const char *localedir)
void dt_loc_init_sharedir(const char *application_directory)
void dt_loc_init_user_config_dir(const char *configdir)
gchar * dt_loc_get_home_dir(const gchar *user)
void dt_check_opendir(const char *context, const char *directory)
void dt_loc_get_user_config_dir(char *configdir, size_t bufsize)
static gchar * g_realpath(const char *path)
char * dt_osx_get_bundle_res_path()
gchar * dt_util_fix_path(const gchar *path)