I noticed these two calls to error assume that uid_t fits in int and
unsigned long int. Attached patch fixes it.

Collin
From 31aa496133ded6132ca94538ad9388eba589b3b3 Mon Sep 17 00:00:00 2001
From: Collin Funk <collin.fu...@gmail.com>
Date: Sun, 6 Oct 2024 22:19:51 -0700
Subject: [PATCH] chroot,whoami: use uintmax_t for printing uids

* src/chroot.c (main): Cast the uid to uintmax_t instead of int.
* src/whoami.c (main): Cast the uid to uintmax_t instead of unsigned
long int.
---
 src/chroot.c | 3 ++-
 src/whoami.c | 4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/chroot.c b/src/chroot.c
index e12454c84..1797a16d4 100644
--- a/src/chroot.c
+++ b/src/chroot.c
@@ -375,7 +375,8 @@ main (int argc, char **argv)
       else if (gid_unset (gid))
         {
           error (EXIT_CANCELED, errno,
-                 _("no group specified for unknown uid: %d"), (int) uid);
+                 _("no group specified for unknown uid: %ju"),
+                 (uintmax_t) uid);
         }
     }
 
diff --git a/src/whoami.c b/src/whoami.c
index f64171dfe..834ca9ffc 100644
--- a/src/whoami.c
+++ b/src/whoami.c
@@ -81,8 +81,8 @@ main (int argc, char **argv)
   uid = geteuid ();
   pw = uid == NO_UID && errno ? nullptr : getpwuid (uid);
   if (!pw)
-    error (EXIT_FAILURE, errno, _("cannot find name for user ID %lu"),
-           (unsigned long int) uid);
+    error (EXIT_FAILURE, errno, _("cannot find name for user ID %ju"),
+           (uintmax_t) uid);
   puts (pw->pw_name);
   return EXIT_SUCCESS;
 }
-- 
2.46.2

Reply via email to