aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libfonts_get_font_root_dirs.c49
1 files changed, 39 insertions, 10 deletions
diff --git a/libfonts_get_font_root_dirs.c b/libfonts_get_font_root_dirs.c
index 1ebbb96..053fb7c 100644
--- a/libfonts_get_font_root_dirs.c
+++ b/libfonts_get_font_root_dirs.c
@@ -66,39 +66,68 @@ libfonts_get_font_root_dirs(char ***dirsp, size_t *countp, struct libfonts_conte
const char *env;
char **new, *home = NULL;
size_t size = 0;
+ const char *env_xdg_data_home = libfonts_getenv__("XDG_DATA_HOME", ctx);
+ const char *env_home = libfonts_getenv__("HOME", ctx);
+ const char *env_xdg_data_dirs = libfonts_getenv__("XDG_DATA_DIRS", ctx);
*dirsp = NULL;
*countp = 0;
+
env = libfonts_getenv__("LIBFONTS_FONT_DIRS", ctx);
- if (env && *env && add_dirs(dirsp, countp, &size, env, "/fonts"))
+ if (env && *env && add_dirs(dirsp, countp, &size, env, ""))
+ goto fail;
+
+
+ env = env_xdg_data_home;
+ if (env && *env && add_dir(dirsp, countp, &size, env, "/libfonts"))
+ goto fail;
+
+ env = env_home;
+ if (env && *env && (add_dir(dirsp, countp, &size, env, "/.local/share/libfonts") ||
+ add_dir(dirsp, countp, &size, env, "/.libfonts")))
+ goto fail;
+
+ home = libfonts_gethome__(ctx);
+ if (home && *home && (add_dir(dirsp, countp, &size, home, "/.local/share/libfonts") ||
+ add_dir(dirsp, countp, &size, home, "/.libfonts")))
goto fail;
- env = libfonts_getenv__("XDG_DATA_HOME", ctx);
+
+ env = env_xdg_data_dirs;
+ if (env && *env && add_dirs(dirsp, countp, &size, env, "/libfonts"))
+ goto fail;
+
+ if (add_dirs(dirsp, countp, &size, "/usr/local/share", "/libfonts") ||
+ add_dirs(dirsp, countp, &size, "/usr/share", "/libfonts"))
+ goto fail;
+
+
+ env = env_xdg_data_home;
if (env && *env && add_dir(dirsp, countp, &size, env, "/fonts"))
goto fail;
- env = libfonts_getenv__("HOME", ctx);
+ env = env_home;
if (env && *env && (add_dir(dirsp, countp, &size, env, "/.local/share/fonts") ||
add_dir(dirsp, countp, &size, env, "/.fonts")))
goto fail;
- home = libfonts_gethome__(ctx);
- if (home && *home && (add_dir(dirsp, countp, &size, env, "/.local/share/fonts") ||
- add_dir(dirsp, countp, &size, env, "/.fonts")))
+ if (home && *home && (add_dir(dirsp, countp, &size, home, "/.local/share/fonts") ||
+ add_dir(dirsp, countp, &size, home, "/.fonts")))
goto fail;
free(home);
home = NULL;
- env = libfonts_getenv__("XDG_DATA_DIRS", ctx);
+
+ env = env_xdg_data_dirs;
if (env && *env && add_dirs(dirsp, countp, &size, env, "/fonts"))
goto fail;
- if (add_dirs(dirsp, countp, &size, "/usr/local/share", "/fonts"))
- goto fail;
- if (add_dirs(dirsp, countp, &size, "/usr/share", "/fonts"))
+ if (add_dirs(dirsp, countp, &size, "/usr/local/share", "/fonts") ||
+ add_dirs(dirsp, countp, &size, "/usr/share", "/fonts"))
goto fail;
+
if (*countp == size) {
if (SIZE_MAX / sizeof(**dirsp) - 1)
goto enomem;