blob: 49a0b21c6efb0a6af26a7fb2d783adeb0bf4678d [file] [log] [blame]
From b21a9d4f10a066cac76bb345d31fdd24afcf3e6f Mon Sep 17 00:00:00 2001
From: Fathi Boudra <fathi.boudra@linaro.org>
Date: Tue, 9 Apr 2024 08:47:37 +0200
Subject: [PATCH] musl: basename: use portable implementation for basename API
musl has removed the non-prototype declaration of basename from string.h which
now results in build errors with newer clang compilers.
Implement GNU basename behavior using strchr which is portable across libcs.
Fixes:
| ../../git/tools/mountcomposefs.c:43:20:
| error: call to undeclared function 'basename'; ISO C99 and later do not
| support implicit function declarations [-Wimplicit-function-declaration]
| 43 | const char *bin = basename(argv0);
| | ^
| ../../git/tools/mountcomposefs.c:43:14:
| error: incompatible integer to pointer conversion initializing 'const char *'
| with an expression of type 'int' [-Wint-conversion]
| 43 | const char *bin = basename(argv0);
| | ^ ~~~~~~~~~~~~~~~
For reference:
https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7
Closes: https://github.com/containers/composefs/issues/272
Signed-off-by: Fathi Boudra <fathi.boudra@linaro.org>
Upstream-Status: Submitted [https://github.com/containers/composefs/pull/273]
---
libcomposefs/lcfs-utils.h | 6 ++++++
tools/mkcomposefs.c | 2 +-
tools/mountcomposefs.c | 3 ++-
3 files changed, 9 insertions(+), 2 deletions(-)
--- a/tools/mountcomposefs.c
+++ b/tools/mountcomposefs.c
@@ -37,10 +37,11 @@
#include <linux/fsverity.h>
#include "libcomposefs/lcfs-mount.h"
+#include "libcomposefs/lcfs-utils.h"
static void usage(const char *argv0)
{
- const char *bin = basename(argv0);
+ const char *bin = gnu_basename(argv0);
fprintf(stderr,
"usage: %s [-t type] [-o opt[,opts..]] IMAGE MOUNTPOINT\n"
"Example:\n"
--- a/libcomposefs/lcfs-utils.h
+++ b/libcomposefs/lcfs-utils.h
@@ -161,4 +161,10 @@ static inline void *steal_pointer(void *
/* type safety */
#define steal_pointer(pp) (0 ? (*(pp)) : (steal_pointer)(pp))
+static inline const char *gnu_basename(const char *filename)
+{
+ const char *p = strrchr(filename, '/');
+ return p ? p+1 : filename;
+}
+
#endif
--- a/tools/mkcomposefs.c
+++ b/tools/mkcomposefs.c
@@ -315,7 +315,7 @@ static int fill_store(struct lcfs_node_s
static void usage(const char *argv0)
{
- const char *bin = basename(argv0);
+ const char *bin = gnu_basename(argv0);
fprintf(stderr,
"Usage: %s [OPTIONS] SOURCE IMAGE\n"
"Options:\n"