]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
login-utils: include libgen.h for basename API
authorKhem Raj <raj.khem@gmail.com>
Mon, 4 Dec 2023 03:59:46 +0000 (19:59 -0800)
committerKhem Raj <raj.khem@gmail.com>
Mon, 4 Dec 2023 04:57:38 +0000 (20:57 -0800)
musl has removed the non-prototype declaration of basename from string.h [1] which now results in build errors with clang-17+ compiler

include libgen.h for using the posix declaration of the funciton.

Fixes

../util-linux-2.39.2/login-utils/su-common.c:847:20: error: call to undeclared function 'basename'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
  847 |                 shell_basename = basename(shell);
      |                                  ^

[1] https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7

Signed-off-by: Khem Raj <raj.khem@gmail.com>
login-utils/su-common.c

index c5c0102e5ea9047997f082c9f026e32a6c886460..06ce5dba2e1b638f527cd70f69386d455dc387e5 100644 (file)
@@ -26,6 +26,7 @@
 #include <sys/types.h>
 #include <pwd.h>
 #include <grp.h>
+#include <libgen.h>
 #include <security/pam_appl.h>
 #ifdef HAVE_SECURITY_PAM_MISC_H
 # include <security/pam_misc.h>
@@ -840,17 +841,20 @@ static void run_shell(
                                su->simulate_login ? " login" : "",
                                su->fast_startup ? " fast-start" : ""));
 
+  char* tmp = xstrdup(shell);
        if (su->simulate_login) {
                char *arg0;
                char *shell_basename;
 
-               shell_basename = basename(shell);
+               shell_basename = basename(tmp);
                arg0 = xmalloc(strlen(shell_basename) + 2);
                arg0[0] = '-';
                strcpy(arg0 + 1, shell_basename);
                args[0] = arg0;
-       } else
-               args[0] = basename(shell);
+       } else {
+    args[0] = basename(tmp);
+  }
+  free(tmp);
 
        if (su->fast_startup)
                args[argno++] = "-f";