1From 5325ab5813617f35f03806ec420829dde7104387 Mon Sep 17 00:00:00 2001 2From: Chen Qi <Qi.Chen@windriver.com> 3Date: Mon, 25 Feb 2019 14:56:21 +0800 4Subject: [PATCH 04/22] don't fail if GLOB_BRACE and GLOB_ALTDIRFUNC is not 5 defined 6 7If the standard library doesn't provide brace 8expansion users just won't get it. 9 10Dont use GNU GLOB extentions on non-glibc systems 11 12Conditionalize use of GLOB_ALTDIRFUNC 13 14Upstream-Status: Inappropriate [musl specific] 15 16Signed-off-by: Khem Raj <raj.khem@gmail.com> 17Signed-off-by: Chen Qi <Qi.Chen@windriver.com> 18[rebased for systemd 243] 19Signed-off-by: Scott Murray <scott.murray@konsulko.com> 20--- 21 src/basic/glob-util.c | 12 ++++++++++++ 22 src/test/test-glob-util.c | 16 ++++++++++++++++ 23 src/tmpfiles/tmpfiles.c | 10 ++++++++++ 24 3 files changed, 38 insertions(+) 25 26diff --git a/src/basic/glob-util.c b/src/basic/glob-util.c 27index 802ca8c655..23818a67c6 100644 28--- a/src/basic/glob-util.c 29+++ b/src/basic/glob-util.c 30@@ -12,6 +12,12 @@ 31 #include "path-util.h" 32 #include "strv.h" 33 34+/* Don't fail if the standard library 35+ * doesn't provide brace expansion */ 36+#ifndef GLOB_BRACE 37+#define GLOB_BRACE 0 38+#endif 39+ 40 static void closedir_wrapper(void* v) { 41 (void) closedir(v); 42 } 43@@ -19,6 +25,7 @@ static void closedir_wrapper(void* v) { 44 int safe_glob(const char *path, int flags, glob_t *pglob) { 45 int k; 46 47+#ifdef GLOB_ALTDIRFUNC 48 /* We want to set GLOB_ALTDIRFUNC ourselves, don't allow it to be set. */ 49 assert(!(flags & GLOB_ALTDIRFUNC)); 50 51@@ -32,9 +39,14 @@ int safe_glob(const char *path, int flags, glob_t *pglob) { 52 pglob->gl_lstat = lstat; 53 if (!pglob->gl_stat) 54 pglob->gl_stat = stat; 55+#endif 56 57 errno = 0; 58+#ifdef GLOB_ALTDIRFUNC 59 k = glob(path, flags | GLOB_ALTDIRFUNC, NULL, pglob); 60+#else 61+ k = glob(path, flags, NULL, pglob); 62+#endif 63 if (k == GLOB_NOMATCH) 64 return -ENOENT; 65 if (k == GLOB_NOSPACE) 66diff --git a/src/test/test-glob-util.c b/src/test/test-glob-util.c 67index 9b3e73cce0..3790ba3be5 100644 68--- a/src/test/test-glob-util.c 69+++ b/src/test/test-glob-util.c 70@@ -34,6 +34,12 @@ TEST(glob_first) { 71 assert_se(first == NULL); 72 } 73 74+/* Don't fail if the standard library 75+ * doesn't provide brace expansion */ 76+#ifndef GLOB_BRACE 77+#define GLOB_BRACE 0 78+#endif 79+ 80 TEST(glob_exists) { 81 char name[] = "/tmp/test-glob_exists.XXXXXX"; 82 int fd = -EBADF; 83@@ -61,11 +67,13 @@ TEST(glob_no_dot) { 84 const char *fn; 85 86 _cleanup_globfree_ glob_t g = { 87+#ifdef GLOB_ALTDIRFUNC 88 .gl_closedir = closedir_wrapper, 89 .gl_readdir = (struct dirent *(*)(void *)) readdir_no_dot, 90 .gl_opendir = (void *(*)(const char *)) opendir, 91 .gl_lstat = lstat, 92 .gl_stat = stat, 93+#endif 94 }; 95 96 int r; 97@@ -73,11 +81,19 @@ TEST(glob_no_dot) { 98 assert_se(mkdtemp(template)); 99 100 fn = strjoina(template, "/*"); 101+#ifdef GLOB_ALTDIRFUNC 102 r = glob(fn, GLOB_NOSORT|GLOB_BRACE|GLOB_ALTDIRFUNC, NULL, &g); 103+#else 104+ r = glob(fn, GLOB_NOSORT|GLOB_BRACE, NULL, &g); 105+#endif 106 assert_se(r == GLOB_NOMATCH); 107 108 fn = strjoina(template, "/.*"); 109+#ifdef GLOB_ALTDIRFUNC 110 r = glob(fn, GLOB_NOSORT|GLOB_BRACE|GLOB_ALTDIRFUNC, NULL, &g); 111+#else 112+ r = glob(fn, GLOB_NOSORT|GLOB_BRACE, NULL, &g); 113+#endif 114 assert_se(r == GLOB_NOMATCH); 115 116 (void) rm_rf(template, REMOVE_ROOT|REMOVE_PHYSICAL); 117diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c 118index 230ec09b97..2cc5f391d7 100644 119--- a/src/tmpfiles/tmpfiles.c 120+++ b/src/tmpfiles/tmpfiles.c 121@@ -73,6 +73,12 @@ 122 #include "user-util.h" 123 #include "virt.h" 124 125+/* Don't fail if the standard library 126+ * doesn't provide brace expansion */ 127+#ifndef GLOB_BRACE 128+#define GLOB_BRACE 0 129+#endif 130+ 131 /* This reads all files listed in /etc/tmpfiles.d/?*.conf and creates 132 * them in the file system. This is intended to be used to create 133 * properly owned directories beneath /tmp, /var/tmp, /run, which are 134@@ -2434,7 +2440,9 @@ finish: 135 136 static int glob_item(Context *c, Item *i, action_t action) { 137 _cleanup_globfree_ glob_t g = { 138+#ifdef GLOB_ALTDIRFUNC 139 .gl_opendir = (void *(*)(const char *)) opendir_nomod, 140+#endif 141 }; 142 int r = 0, k; 143 144@@ -2461,7 +2469,9 @@ static int glob_item_recursively( 145 fdaction_t action) { 146 147 _cleanup_globfree_ glob_t g = { 148+#ifdef GLOB_ALTDIRFUNC 149 .gl_opendir = (void *(*)(const char *)) opendir_nomod, 150+#endif 151 }; 152 int r = 0, k; 153 154-- 1552.34.1 156 157