From f003abf608d30f6502dd87be08f14ef2c65e7c90 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Mon, 10 Aug 2020 17:24:17 +0100 Subject: [PATCH] Simplify and merge {config,theme}-dir.c --- include/{theme/theme-dir.h => common/dir.h} | 8 +- include/config/config-dir.h | 6 - src/common/dir.c | 135 ++++++++++++++++++++ src/common/meson.build | 1 + src/config/config-dir.c | 70 ---------- src/config/meson.build | 1 - src/config/rcxml.c | 2 +- src/theme/meson.build | 1 - src/theme/theme-dir.c | 68 ---------- src/theme/theme.c | 2 +- src/theme/xbm/xbm.c | 2 +- tests/meson.build | 2 +- tools/dirs/Makefile | 6 + tools/dirs/dir-list | Bin 0 -> 22576 bytes tools/dirs/dir-list.c | 12 ++ tools/rcxml/Makefile | 5 +- tools/theme/Makefile | 2 +- tools/xbm/Makefile | 10 +- tools/xbm/xbm-parse.c | 7 +- tools/xbm/xbm-tokenize.c | 4 +- 20 files changed, 181 insertions(+), 163 deletions(-) rename include/{theme/theme-dir.h => common/dir.h} (61%) delete mode 100644 include/config/config-dir.h create mode 100644 src/common/dir.c delete mode 100644 src/config/config-dir.c delete mode 100644 src/theme/theme-dir.c create mode 100644 tools/dirs/Makefile create mode 100755 tools/dirs/dir-list create mode 100644 tools/dirs/dir-list.c diff --git a/include/theme/theme-dir.h b/include/common/dir.h similarity index 61% rename from include/theme/theme-dir.h rename to include/common/dir.h index 310e6077..e654664d 100644 --- a/include/theme/theme-dir.h +++ b/include/common/dir.h @@ -1,5 +1,7 @@ -#ifndef __LABWC_THEME_DIR_H -#define __LABWC_THEME_DIR_H +#ifndef __LABWC_DIR_H +#define __LABWC_DIR_H + +char *config_dir(void); /** * theme_dir - find theme directory containing theme @theme_name @@ -7,4 +9,4 @@ */ char *theme_dir(const char *theme_name); -#endif /* __LABWC_THEME_DIR_H */ +#endif /* __LABWC_DIR_H */ diff --git a/include/config/config-dir.h b/include/config/config-dir.h deleted file mode 100644 index 19ae1303..00000000 --- a/include/config/config-dir.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __LABWC_CONFIG_DIR_H -#define __LABWC_CONFIG_DIR_H - -char *config_dir(void); - -#endif /* __LABWC_CONFIG_DIR_H */ diff --git a/src/common/dir.c b/src/common/dir.c new file mode 100644 index 00000000..aa8cadc4 --- /dev/null +++ b/src/common/dir.c @@ -0,0 +1,135 @@ +/* + * Find the configuration and theme directories + * + * Copyright Johan Malm 2020 + */ + +#include +#include +#include +#include +#include + +#include "common/dir.h" + +struct dir { + const char *prefix; + const char *path; +}; + +/* clang-format off */ +static struct dir config_dirs[] = { + { "XDG_CONFIG_HOME", "labwc" }, + { "HOME", ".config/labwc" }, + { "XDG_CONFIG_DIRS", "labwc" }, + { NULL, "/etc/xdg/labwc" }, + { "XDG_CONFIG_HOME", "openbox" }, + { "HOME", ".config/openbox" }, + { "XDG_CONFIG_DIRS", "openbox" }, + { NULL, "/etc/xdg/openbox" }, + { NULL, NULL } +}; + +static struct dir theme_dirs[] = { + { "XDG_DATA_HOME", "themes" }, + { "HOME", ".local/share/themes" }, + { "HOME", ".themes" }, + { "XDG_DATA_DIRS", "themes" }, + { NULL, "/usr/share/themes" }, + { NULL, "/usr/local/share/themes" }, + { NULL, "opt/share/themes" }, + { NULL, NULL } +}; +/* clang-format on */ + +static bool isdir(const char *path) +{ + struct stat st; + return (!stat(path, &st) && S_ISDIR(st.st_mode)); +} + +struct ctx { + void (*build_path_fn)(struct ctx *ctx, char *prefix, const char *path); + char *buf; + size_t len; + struct dir *dirs; + const char *theme_name; +}; + +static void build_config_path(struct ctx *ctx, char *prefix, const char *path) +{ + if (!prefix) + snprintf(ctx->buf, ctx->len, "%s", path); + else + snprintf(ctx->buf, ctx->len, "%s/%s", prefix, path); +} + +static void build_theme_path(struct ctx *ctx, char *prefix, const char *path) +{ + if (!prefix) + snprintf(ctx->buf, ctx->len, "%s/%s/openbox-3", path, + ctx->theme_name); + else + snprintf(ctx->buf, ctx->len, "%s/%s/%s/openbox-3", prefix, path, + ctx->theme_name); +} + +char *find_dir(struct ctx *ctx) +{ + char *debug = getenv("LABWC_DEBUG_DIR_CONFIG_AND_THEME"); + + for (int i = 0; ctx->dirs[i].path; i++) { + struct dir d = ctx->dirs[i]; + if (!d.prefix) { + /* handle /etc/xdg... */ + ctx->build_path_fn(ctx, NULL, d.path); + if (debug) + fprintf(stderr, "DEBUG: %s\n", ctx->buf); + if (isdir(ctx->buf)) + return ctx->buf; + } else { + /* handle $HOME/.config/... and $XDG_* */ + char *prefix = getenv(d.prefix); + if (!prefix) + continue; + gchar **prefixes = g_strsplit(prefix, ":", -1); + for (gchar **p = prefixes; *p; p++) { + ctx->build_path_fn(ctx, *p, d.path); + if (debug) + fprintf(stderr, "DEBUG: %s\n", + ctx->buf); + if (isdir(ctx->buf)) + return ctx->buf; + } + } + } + /* no directory was found */ + ctx->buf[0] = '.'; + ctx->buf[1] = '\0'; + return ctx->buf; +} + +char *config_dir(void) +{ + static char buf[4096] = { 0 }; + if (buf[0] != '\0') + return buf; + struct ctx ctx = { .build_path_fn = build_config_path, + .buf = buf, + .len = sizeof(buf), + .dirs = config_dirs }; + return find_dir(&ctx); +} + +char *theme_dir(const char *theme_name) +{ + static char buf[4096] = { 0 }; + if (buf[0] != '\0') + return buf; + struct ctx ctx = { .build_path_fn = build_theme_path, + .buf = buf, + .len = sizeof(buf), + .dirs = theme_dirs, + .theme_name = theme_name }; + return find_dir(&ctx); +} diff --git a/src/common/meson.build b/src/common/meson.build index 4a471ab1..48e1dd56 100644 --- a/src/common/meson.build +++ b/src/common/meson.build @@ -1,5 +1,6 @@ labwc_sources += files( 'buf.c', + 'dir.c', 'font.c', 'grab-file.c', 'spawn.c', diff --git a/src/config/config-dir.c b/src/config/config-dir.c deleted file mode 100644 index f506b960..00000000 --- a/src/config/config-dir.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Find the labwc configuration directory - * - * Copyright Johan Malm 2020 - */ - -#include -#include -#include -#include -#include - -#include "config/config-dir.h" - -struct dir { - const char *prefix; - const char *path; -}; - -/* clang-format off */ -static struct dir config_dirs[] = { - { "XDG_CONFIG_HOME", "labwc" }, - { "HOME", ".config/labwc" }, - { "XDG_CONFIG_DIRS", "labwc" }, - { NULL, "/etc/xdg/labwc" }, - { "XDG_CONFIG_HOME", "openbox" }, - { "HOME", ".config/openbox" }, - { "XDG_CONFIG_DIRS", "openbox" }, - { NULL, "/etc/xdg/openbox" }, - { NULL, NULL } -}; -/* clang-format on */ - -static bool isdir(const char *path) -{ - struct stat st; - return (!stat(path, &st) && S_ISDIR(st.st_mode)); -} - -char *config_dir(void) -{ - static char buf[4096] = { 0 }; - if (buf[0] != '\0') - return buf; - - for (int i = 0; config_dirs[i].path; i++) { - struct dir d = config_dirs[i]; - if (!d.prefix) { - /* handle /etc/xdg... */ - snprintf(buf, sizeof(buf), "%s", d.path); - if (isdir(buf)) - return buf; - } else { - /* handle $HOME/.config/... and $XDG_* */ - char *prefix = getenv(d.prefix); - if (!prefix) - continue; - gchar **prefixes = g_strsplit(prefix, ":", -1); - for (gchar **p = prefixes; *p; p++) { - snprintf(buf, sizeof(buf), "%s/%s", *p, d.path); - if (isdir(buf)) - return buf; - } - } - } - /* no config directory was found */ - buf[0] = '.'; - buf[1] = '\0'; - return buf; -} diff --git a/src/config/meson.build b/src/config/meson.build index 97a67693..ac8e6012 100644 --- a/src/config/meson.build +++ b/src/config/meson.build @@ -1,5 +1,4 @@ labwc_sources += files( - 'config-dir.c', 'rcxml.c', 'keybind.c', ) diff --git a/src/config/rcxml.c b/src/config/rcxml.c index b5c86842..8b2c3698 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -12,7 +12,7 @@ #include "config/rcxml.h" #include "config/keybind.h" -#include "config/config-dir.h" +#include "common/dir.h" #include "common/bug-on.h" #include "common/font.h" diff --git a/src/theme/meson.build b/src/theme/meson.build index bbf34363..e7181a06 100644 --- a/src/theme/meson.build +++ b/src/theme/meson.build @@ -1,6 +1,5 @@ labwc_sources += files( 'theme.c', - 'theme-dir.c', ) subdir('xbm') diff --git a/src/theme/theme-dir.c b/src/theme/theme-dir.c deleted file mode 100644 index ee8b5842..00000000 --- a/src/theme/theme-dir.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Find the openbox theme directory - * - * Copyright Johan Malm 2020 - */ - -#include -#include -#include -#include -#include - -struct dir { - const char *prefix; - const char *path; -}; - -/* clang-format off */ -static struct dir theme_dirs[] = { - { "XDG_DATA_HOME", "themes" }, - { "HOME", ".local/share/themes" }, - { "HOME", ".themes" }, - { "XDG_DATA_DIRS", "themes" }, - { NULL, "/usr/share/themes" }, - { NULL, "/usr/local/share/themes" }, - { NULL, "opt/share/themes" }, - { NULL, NULL } -}; -/* clang-format on */ - -static bool isdir(const char *path) -{ - struct stat st; - return (!stat(path, &st) && S_ISDIR(st.st_mode)); -} - -char *theme_dir(const char *theme_name) -{ - static char buf[4096] = { 0 }; - if (buf[0] != '\0') - return buf; - - for (int i = 0; theme_dirs[i].path; i++) { - struct dir d = theme_dirs[i]; - if (!d.prefix) { - snprintf(buf, sizeof(buf), "%s/%s/openbox-3", d.path, - theme_name); - if (isdir(buf)) - return buf; - } else { - char *prefix = getenv(d.prefix); - if (!prefix) - continue; - gchar **prefixes = g_strsplit(prefix, ":", -1); - for (gchar **p = prefixes; *p; p++) { - snprintf(buf, sizeof(buf), - "%s/%s/%s/openbox-3", *p, d.path, - theme_name); - if (isdir(buf)) - return buf; - } - } - } - /* no config directory was found */ - buf[0] = '.'; - buf[1] = '\0'; - return buf; -} diff --git a/src/theme/theme.c b/src/theme/theme.c index 8175482d..c2ce6135 100644 --- a/src/theme/theme.c +++ b/src/theme/theme.c @@ -7,7 +7,7 @@ #include #include "theme/theme.h" -#include "theme/theme-dir.h" +#include "common/dir.h" static int hex_to_dec(char c) { diff --git a/src/theme/xbm/xbm.c b/src/theme/xbm/xbm.c index 92581146..d1256050 100644 --- a/src/theme/xbm/xbm.c +++ b/src/theme/xbm/xbm.c @@ -10,8 +10,8 @@ #include "theme/theme.h" #include "theme/xbm/xbm.h" #include "theme/xbm/parse.h" -#include "theme/theme-dir.h" #include "config/rcxml.h" +#include "common/dir.h" #include "common/grab-file.h" /* built-in 6x6 buttons */ diff --git a/tests/meson.build b/tests/meson.build index eedb43a9..44756a17 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -3,7 +3,7 @@ rcxml_lib = static_library( sources: files( '../src/config/rcxml.c', '../src/config/keybind.c', - '../src/config/config-dir.c', + '../src/common/dir.c', '../src/common/buf.c', '../src/common/font.c', ), diff --git a/tools/dirs/Makefile b/tools/dirs/Makefile new file mode 100644 index 00000000..3633b5c4 --- /dev/null +++ b/tools/dirs/Makefile @@ -0,0 +1,6 @@ +CFLAGS += -g -Wall -I../../include +CFLAGS += `pkg-config --cflags glib-2.0` +LDFLAGS += `pkg-config --libs glib-2.0` + +all: + $(CC) $(CFLAGS) -o dir-list dir-list.c ../../src/common/dir.c $(LDFLAGS) diff --git a/tools/dirs/dir-list b/tools/dirs/dir-list new file mode 100755 index 0000000000000000000000000000000000000000..2dea97f3db418f362b066b9c972f76ee7ed55931 GIT binary patch literal 22576 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 literal 0 HcmV?d00001 diff --git a/tools/dirs/dir-list.c b/tools/dirs/dir-list.c new file mode 100644 index 00000000..eb7eb00f --- /dev/null +++ b/tools/dirs/dir-list.c @@ -0,0 +1,12 @@ +#include +#include + +#include "common/dir.h" + +int main() +{ + setenv("LABWC_DEBUG_DIR_CONFIG_AND_THEME", "1", 1); + setenv("XDG_CONFIG_HOME", "/a:/bbb:/ccccc:/etc/foo", 1); + printf("%s\n", config_dir()); + printf("%s\n", theme_dir("Numix")); +} diff --git a/tools/rcxml/Makefile b/tools/rcxml/Makefile index 9973985e..c1ef9beb 100644 --- a/tools/rcxml/Makefile +++ b/tools/rcxml/Makefile @@ -6,14 +6,15 @@ ASAN_FLAGS = -O0 -fsanitize=address -fno-common -fno-omit-frame-pointer -rdynami CFLAGS += $(ASAN_FLAGS) LDFLAGS += $(ASAN_FLAGS) -fuse-ld=gold LDFLAGS += `xml2-config --libs` -LDFLAGS += `pkg-config --cflags --libs glib-2.0 wayland-server xkbcommon` +LDFLAGS += `pkg-config --cflags --libs glib-2.0 cairo pangocairo wayland-server xkbcommon` PROGS = rcxml-print-nodenames SRC = \ rcxml-print-nodenames.c \ ../../src/config/rcxml.c \ - ../../src/config/config-dir.c \ + ../../src/common/dir.c \ ../../src/common/buf.c \ + ../../src/common/font.c \ ../../src/config/keybind.c diff --git a/tools/theme/Makefile b/tools/theme/Makefile index 82492008..cbfeb893 100644 --- a/tools/theme/Makefile +++ b/tools/theme/Makefile @@ -10,7 +10,7 @@ LDFLAGS += -DWLR_USE_UNSTABLE SRCS = \ theme-helper.c \ ../../src/theme/theme.c \ - ../../src/theme/theme-dir.c + ../../src/common/dir.c all: gcc $(CFLAGS) -o theme-helper $(SRCS) $(LDFLAGS) diff --git a/tools/xbm/Makefile b/tools/xbm/Makefile index af07e3a2..938753d1 100644 --- a/tools/xbm/Makefile +++ b/tools/xbm/Makefile @@ -4,8 +4,14 @@ LDFLAGS += `pkg-config --cflags --libs cairo` ASAN += -fsanitize=address PROGS = xbm-tokenize xbm-parse -DEP_TOKENIZE = ../../src/common/buf.c ../../src/theme/xbm/tokenize.c -DEP_PARSE = $(DEP_TOKENIZE) ../../src/theme/xbm/parse.c + +DEP_TOKENIZE = \ + ../../src/common/buf.c \ + ../../src/theme/xbm/tokenize.c + +DEP_PARSE = $(DEP_TOKENIZE) \ + ../../src/theme/xbm/parse.c \ + ../../src/common/grab-file.c all: $(PROGS) diff --git a/tools/xbm/xbm-parse.c b/tools/xbm/xbm-parse.c index 71cd6aeb..5bdbf28f 100644 --- a/tools/xbm/xbm-parse.c +++ b/tools/xbm/xbm-parse.c @@ -4,6 +4,7 @@ #include #include "theme/xbm/parse.h" +#include "common/grab-file.h" int main(int argc, char **argv) { @@ -14,12 +15,12 @@ int main(int argc, char **argv) return 1; } - char *buffer = xbm_read_file(argv[1]); + char *buffer = grab_file(argv[1]); if (!buffer) exit(EXIT_FAILURE); - tokens = xbm_tokenize(buffer); + tokens = tokenize_xbm(buffer); free(buffer); - struct pixmap pixmap = xbm_create_pixmap(tokens); + struct pixmap pixmap = parse_xbm_tokens(tokens); free(tokens); cairo_surface_t *g_surface; diff --git a/tools/xbm/xbm-tokenize.c b/tools/xbm/xbm-tokenize.c index e5e6c06b..c299464b 100644 --- a/tools/xbm/xbm-tokenize.c +++ b/tools/xbm/xbm-tokenize.c @@ -3,7 +3,7 @@ #include #include -#include "buf.h" +#include "common/buf.h" #include "theme/xbm/tokenize.h" /* Read file into buffer, because it's easier to tokenize that way */ @@ -41,7 +41,7 @@ int main(int argc, char **argv) char *buffer = read_file(argv[1]); if (!buffer) exit(EXIT_FAILURE); - tokens = xbm_tokenize(buffer); + tokens = tokenize_xbm(buffer); free(buffer); for (struct token *t = tokens; t->type; t++) printf("%s\n", t->name);