1*44b3caf2SPatrick WilliamsFrom b21a9d4f10a066cac76bb345d31fdd24afcf3e6f Mon Sep 17 00:00:00 2001 2*44b3caf2SPatrick WilliamsFrom: Fathi Boudra <fathi.boudra@linaro.org> 3*44b3caf2SPatrick WilliamsDate: Tue, 9 Apr 2024 08:47:37 +0200 4*44b3caf2SPatrick WilliamsSubject: [PATCH] musl: basename: use portable implementation for basename API 5*44b3caf2SPatrick Williams 6*44b3caf2SPatrick Williamsmusl has removed the non-prototype declaration of basename from string.h which 7*44b3caf2SPatrick Williamsnow results in build errors with newer clang compilers. 8*44b3caf2SPatrick Williams 9*44b3caf2SPatrick WilliamsImplement GNU basename behavior using strchr which is portable across libcs. 10*44b3caf2SPatrick Williams 11*44b3caf2SPatrick WilliamsFixes: 12*44b3caf2SPatrick Williams| ../../git/tools/mountcomposefs.c:43:20: 13*44b3caf2SPatrick Williams| error: call to undeclared function 'basename'; ISO C99 and later do not 14*44b3caf2SPatrick Williams| support implicit function declarations [-Wimplicit-function-declaration] 15*44b3caf2SPatrick Williams| 43 | const char *bin = basename(argv0); 16*44b3caf2SPatrick Williams| | ^ 17*44b3caf2SPatrick Williams| ../../git/tools/mountcomposefs.c:43:14: 18*44b3caf2SPatrick Williams| error: incompatible integer to pointer conversion initializing 'const char *' 19*44b3caf2SPatrick Williams| with an expression of type 'int' [-Wint-conversion] 20*44b3caf2SPatrick Williams| 43 | const char *bin = basename(argv0); 21*44b3caf2SPatrick Williams| | ^ ~~~~~~~~~~~~~~~ 22*44b3caf2SPatrick Williams 23*44b3caf2SPatrick WilliamsFor reference: 24*44b3caf2SPatrick Williamshttps://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7 25*44b3caf2SPatrick Williams 26*44b3caf2SPatrick WilliamsCloses: https://github.com/containers/composefs/issues/272 27*44b3caf2SPatrick Williams 28*44b3caf2SPatrick WilliamsSigned-off-by: Fathi Boudra <fathi.boudra@linaro.org> 29*44b3caf2SPatrick Williams 30*44b3caf2SPatrick WilliamsUpstream-Status: Submitted [https://github.com/containers/composefs/pull/273] 31*44b3caf2SPatrick Williams--- 32*44b3caf2SPatrick Williams libcomposefs/lcfs-utils.h | 6 ++++++ 33*44b3caf2SPatrick Williams tools/mkcomposefs.c | 2 +- 34*44b3caf2SPatrick Williams tools/mountcomposefs.c | 3 ++- 35*44b3caf2SPatrick Williams 3 files changed, 9 insertions(+), 2 deletions(-) 36*44b3caf2SPatrick Williams 37*44b3caf2SPatrick Williams--- a/tools/mountcomposefs.c 38*44b3caf2SPatrick Williams+++ b/tools/mountcomposefs.c 39*44b3caf2SPatrick Williams@@ -37,10 +37,11 @@ 40*44b3caf2SPatrick Williams #include <linux/fsverity.h> 41*44b3caf2SPatrick Williams 42*44b3caf2SPatrick Williams #include "libcomposefs/lcfs-mount.h" 43*44b3caf2SPatrick Williams+#include "libcomposefs/lcfs-utils.h" 44*44b3caf2SPatrick Williams 45*44b3caf2SPatrick Williams static void usage(const char *argv0) 46*44b3caf2SPatrick Williams { 47*44b3caf2SPatrick Williams- const char *bin = basename(argv0); 48*44b3caf2SPatrick Williams+ const char *bin = gnu_basename(argv0); 49*44b3caf2SPatrick Williams fprintf(stderr, 50*44b3caf2SPatrick Williams "usage: %s [-t type] [-o opt[,opts..]] IMAGE MOUNTPOINT\n" 51*44b3caf2SPatrick Williams "Example:\n" 52*44b3caf2SPatrick Williams--- a/libcomposefs/lcfs-utils.h 53*44b3caf2SPatrick Williams+++ b/libcomposefs/lcfs-utils.h 54*44b3caf2SPatrick Williams@@ -161,4 +161,10 @@ static inline void *steal_pointer(void * 55*44b3caf2SPatrick Williams /* type safety */ 56*44b3caf2SPatrick Williams #define steal_pointer(pp) (0 ? (*(pp)) : (steal_pointer)(pp)) 57*44b3caf2SPatrick Williams 58*44b3caf2SPatrick Williams+static inline const char *gnu_basename(const char *filename) 59*44b3caf2SPatrick Williams+{ 60*44b3caf2SPatrick Williams+ const char *p = strrchr(filename, '/'); 61*44b3caf2SPatrick Williams+ return p ? p+1 : filename; 62*44b3caf2SPatrick Williams+} 63*44b3caf2SPatrick Williams+ 64*44b3caf2SPatrick Williams #endif 65*44b3caf2SPatrick Williams--- a/tools/mkcomposefs.c 66*44b3caf2SPatrick Williams+++ b/tools/mkcomposefs.c 67*44b3caf2SPatrick Williams@@ -315,7 +315,7 @@ static int fill_store(struct lcfs_node_s 68*44b3caf2SPatrick Williams 69*44b3caf2SPatrick Williams static void usage(const char *argv0) 70*44b3caf2SPatrick Williams { 71*44b3caf2SPatrick Williams- const char *bin = basename(argv0); 72*44b3caf2SPatrick Williams+ const char *bin = gnu_basename(argv0); 73*44b3caf2SPatrick Williams fprintf(stderr, 74*44b3caf2SPatrick Williams "Usage: %s [OPTIONS] SOURCE IMAGE\n" 75*44b3caf2SPatrick Williams "Options:\n" 76