diff options
Diffstat (limited to 'user/i3status/glob_tilde.patch')
-rw-r--r-- | user/i3status/glob_tilde.patch | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/user/i3status/glob_tilde.patch b/user/i3status/glob_tilde.patch new file mode 100644 index 000000000..b1f2ba667 --- /dev/null +++ b/user/i3status/glob_tilde.patch @@ -0,0 +1,59 @@ +diff --git i/i3status.c w/i3status.c +index 5088c96..3c18214 100644 +--- i/i3status.c ++++ w/i3status.c +@@ -210,29 +210,19 @@ static int valid_color(const char *value) { + * + */ + static char *resolve_tilde(const char *path) { +- static glob_t globbuf; +- char *head, *tail, *result = NULL; +- +- tail = strchr(path, '/'); +- head = strndup(path, tail ? (size_t)(tail - path) : strlen(path)); +- +- int res = glob(head, GLOB_TILDE, NULL, &globbuf); +- free(head); +- /* no match, or many wildcard matches are bad */ +- if (res == GLOB_NOMATCH || globbuf.gl_pathc != 1) +- result = sstrdup(path); +- else if (res != 0) { +- die("glob() failed"); +- } else { +- head = globbuf.gl_pathv[0]; +- result = scalloc(strlen(head) + (tail ? strlen(tail) : 0) + 1); +- strncpy(result, head, strlen(head)); +- if (tail) +- strncat(result, tail, strlen(tail)); ++ char *home, *result = NULL; ++ ++ if (strncmp(path, "~/", 2) == 0) { ++ home = getenv("HOME"); ++ if (home != NULL) { ++ result = scalloc(strlen(home) + strlen(path)); ++ strcpy(result, home); ++ strcat(result, path+1); ++ return result; ++ } + } +- globfree(&globbuf); + +- return result; ++ return sstrdup(path); + } + + static char *get_config_path(void) { +diff --git i/include/i3status.h w/include/i3status.h +index 9ac471d..27ecae4 100644 +--- i/include/i3status.h ++++ w/include/i3status.h +@@ -236,4 +236,9 @@ extern cfg_t *cfg, *cfg_general, *cfg_section; + extern void **cur_instance; + + extern pthread_t main_thread; ++ ++#ifndef GLOB_TILDE ++#define GLOB_TILDE 0 ++#endif ++ + #endif |