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__
45#define HAVE_GETPWNAM_R 1
66void dt_loc_init(
const char *datadir,
const char *moduledir,
const char *localedir,
const char *configdir,
const char *cachedir,
const char *tmpdir,
const char *kerneldir)
69 char* application_directory = NULL;
73 int length = wai_getExecutablePath(NULL, 0, &dirname_length);
76 application_directory = (
char*)malloc(length + 1);
78 wai_getExecutablePath(application_directory, length, &dirname_length);
80 application_directory[dirname_length] =
'\0';
98 if(
IS_NULL_PTR(user) || g_strcmp0(user, g_get_user_name()) == 0)
100 const char *home_dir = g_getenv(
"HOME");
101 return g_strdup((!
IS_NULL_PTR(home_dir)) ? home_dir : g_get_home_dir());
104#if defined HAVE_GETPWNAM_R
108 struct passwd *result;
109#ifdef _SC_GETPW_R_SIZE_MAX
110 int bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
119 gchar *buffer = g_malloc0_n(bufsize,
sizeof(gchar));
125 getpwnam_r(user, &pwd, buffer, bufsize, &result);
132 gchar *dir = g_strdup(pwd.pw_dir);
141gchar *
dt_loc_init_generic(
const char *absolute_value,
const char *application_directory,
const char *default_value)
143 gchar *result = NULL;
154 if(application_directory)
159#if defined(__APPLE__)
177 g_snprintf(complete_path,
sizeof(complete_path),
"%s/../Resources%s", application_directory, default_value + 2);
182 g_snprintf(complete_path,
sizeof(complete_path),
"%s/%s", application_directory, default_value);
185 g_snprintf(complete_path,
sizeof(complete_path),
"%s/%s", application_directory, default_value);
187 path = g_strdup(complete_path);
192 path = g_strdup(default_value);
197 if(g_file_test(path, G_FILE_TEST_EXISTS) ==
FALSE) g_mkdir_with_parents(path, 0700);
208 char *default_config_dir = g_build_filename(g_get_user_config_dir(),
"ansel", NULL);
222 char *default_cache_dir = g_build_filename(g_get_user_cache_dir(),
"ansel", NULL);
238 fprintf(stderr,
"directory for %s has not been set.\n", context);
243 wchar_t *wdirectory = g_utf8_to_utf16 (
directory, -1, NULL, NULL, NULL);
244 DWORD attribs = GetFileAttributesW(wdirectory);
246 if (attribs != INVALID_FILE_ATTRIBUTES &&
247 (attribs & FILE_ATTRIBUTE_DIRECTORY))
253 fprintf(stderr,
"%s: directory '%s' fails to open.'\n", context,
directory);
265 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
gchar * directory
documentation root given after –doc, or NULL
void dt_loc_get_sharedir(char *sharedir, size_t bufsize)
void dt_loc_init_tmp_dir(const char *tmpdir)
const char * dt_loc_moduledir(void)
const char * dt_loc_sharedir(void)
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)
const char * dt_loc_datadir(void)
const char * dt_loc_cachedir(void)
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)
const char * dt_loc_kerneldir(void)
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)
const char * dt_loc_tmpdir(void)
void dt_loc_init_sharedir(const char *application_directory)
const char * dt_loc_configdir(void)
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)
const char * dt_loc_localedir(void)
void dt_loc_get_user_config_dir(char *configdir, size_t bufsize)
static gchar * g_realpath(const char *path)
void dt_print(dt_debug_thread_t thread, const char *msg,...) __attribute__((format(printf
Print to stdout when thread is enabled, prefixed with seconds since startup.
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
#define dt_free(ptr)
g_free() ptr and set it to NULL, skipping both if it is already NULL.
char * dt_osx_get_bundle_res_path()
#define DT_PATH_MAX
Buffer size for a filesystem path anywhere in Ansel.
gchar * dt_util_fix_path(const gchar *path)