aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2024-04-14 15:43:23 +0200
committerRosen Penev <rosenp@gmail.com>2024-04-20 18:05:14 -0700
commitddd379416ed01b541101644d3880dd9ece3de4d3 (patch)
treeeb27814f769be2770291e5ace88bcebdc8a83d0c
parent46c8b621b0ee2fffedb199fbaec8e4df3ca19a6c (diff)
tini: Fix compilation with musl libc 1.2.5
Support POSIX basename used in musl libc 1.2.5. This fixes compilation with musl libc 1.2.5. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
-rw-r--r--utils/tini/patches/002-Support-POSIX-basename-from-musl-libc.patch72
1 files changed, 72 insertions, 0 deletions
diff --git a/utils/tini/patches/002-Support-POSIX-basename-from-musl-libc.patch b/utils/tini/patches/002-Support-POSIX-basename-from-musl-libc.patch
new file mode 100644
index 000000000..3fce314a8
--- /dev/null
+++ b/utils/tini/patches/002-Support-POSIX-basename-from-musl-libc.patch
@@ -0,0 +1,72 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Hauke Mehrtens <hauke@hauke-m.de>
+Date: Sun, 14 Apr 2024 15:33:51 +0200
+Subject: Support POSIX basename() from musl libc
+
+Musl libc 1.2.5 removed the definition of the basename() function from
+string.h and only provides it in libgen.h as the POSIX standard
+defines it.
+
+This change fixes compilation with musl libc 1.2.5.
+````
+build_dir/target-mips_24kc_musl/tini-0.19.0/src/tini.c:227:36: error: implicit declaration of function 'basename' [-Wimplicit-function-declaration]
+ 227 | fprintf(file, "%s (%s)\n", basename(name), TINI_VERSION_STRING);
+build_dir/target-mips_24kc_musl/tini-0.19.0/src/tini.c:227:25: error: format '%s' expects argument of type 'char *', but argument 3 has type 'int' [-Werror=format=]
+ 227 | fprintf(file, "%s (%s)\n", basename(name), TINI_VERSION_STRING);
+ | ~^ ~~~~~~~~~~~~~~
+ | | |
+ | char * int
+ | %d
+
+````
+
+basename() modifies the input string, copy it first with strdup(), If
+strdup() returns NULL the code will handle it.
+
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+---
+ src/tini.c | 15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+--- a/src/tini.c
++++ b/src/tini.c
+@@ -14,6 +14,7 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <stdbool.h>
++#include <libgen.h>
+
+ #include "tiniConfig.h"
+ #include "tiniLicense.h"
+@@ -224,14 +225,19 @@ int spawn(const signal_configuration_t*
+ }
+
+ void print_usage(char* const name, FILE* const file) {
+- fprintf(file, "%s (%s)\n", basename(name), TINI_VERSION_STRING);
++ char *dirc, *bname;
++
++ dirc = strdup(name);
++ bname = basename(dirc);
++
++ fprintf(file, "%s (%s)\n", bname, TINI_VERSION_STRING);
+
+ #if TINI_MINIMAL
+- fprintf(file, "Usage: %s PROGRAM [ARGS] | --version\n\n", basename(name));
++ fprintf(file, "Usage: %s PROGRAM [ARGS] | --version\n\n", bname);
+ #else
+- fprintf(file, "Usage: %s [OPTIONS] PROGRAM -- [ARGS] | --version\n\n", basename(name));
++ fprintf(file, "Usage: %s [OPTIONS] PROGRAM -- [ARGS] | --version\n\n", bname);
+ #endif
+- fprintf(file, "Execute a program under the supervision of a valid init process (%s)\n\n", basename(name));
++ fprintf(file, "Execute a program under the supervision of a valid init process (%s)\n\n", bname);
+
+ fprintf(file, "Command line options:\n\n");
+
+@@ -261,6 +267,7 @@ void print_usage(char* const name, FILE*
+ fprintf(file, " %s: Send signals to the child's process group.\n", KILL_PROCESS_GROUP_GROUP_ENV_VAR);
+
+ fprintf(file, "\n");
++ free(dirc);
+ }
+
+ void print_license(FILE* const file) {