From dd625f5d907387d695dfaaab923f6dc1022209c1 Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Mon, 10 Mar 2025 08:48:17 +0900 Subject: [PATCH] tini: Support posix basename from musl libc This fixes building with musl libc. Signed-off-by: Kyungjik Min Signed-off-by: Bruce Ashfield --- ...upport-POSIX-basename-from-musl-libc.patch | 76 +++++++++++++++++++ recipes-containers/tini/tini_0.19.0.bb | 1 + 2 files changed, 77 insertions(+) create mode 100644 recipes-containers/tini/tini/0001-Support-POSIX-basename-from-musl-libc.patch diff --git a/recipes-containers/tini/tini/0001-Support-POSIX-basename-from-musl-libc.patch b/recipes-containers/tini/tini/0001-Support-POSIX-basename-from-musl-libc.patch new file mode 100644 index 00000000..b504c37a --- /dev/null +++ b/recipes-containers/tini/tini/0001-Support-POSIX-basename-from-musl-libc.patch @@ -0,0 +1,76 @@ +From 10479a6eef32f8e64fd5bf894dee9c7a6f21ce4c Mon Sep 17 00:00:00 2001 +From: Hauke Mehrtens +Date: Sun, 14 Apr 2024 15:33:51 +0200 +Subject: [PATCH] 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. + +Upstream-Status: Submitted [https://github.com/krallin/tini/pull/223] + +Signed-off-by: Hauke Mehrtens +--- + src/tini.c | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +diff --git a/src/tini.c b/src/tini.c +index 7914d3a..41d1506 100644 +--- a/src/tini.c ++++ b/src/tini.c +@@ -14,6 +14,7 @@ + #include + #include + #include ++#include + + #include "tiniConfig.h" + #include "tiniLicense.h" +@@ -224,14 +225,19 @@ int spawn(const signal_configuration_t* const sigconf_ptr, char* const argv[], i + } + + 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* const 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) { diff --git a/recipes-containers/tini/tini_0.19.0.bb b/recipes-containers/tini/tini_0.19.0.bb index fd90f620..1f3ae8b2 100644 --- a/recipes-containers/tini/tini_0.19.0.bb +++ b/recipes-containers/tini/tini_0.19.0.bb @@ -9,6 +9,7 @@ SRC_URI = " \ git://github.com/krallin/tini.git;branch=master;protocol=https \ file://0001-Do-not-strip-the-output-binary-allow-yocto-to-do-thi.patch \ file://0001-tini.c-a-function-declaration-without-a-prototype-is.patch \ + file://0001-Support-POSIX-basename-from-musl-libc.patch \ " LICENSE = "MIT"