]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
maint: remove unwarranted uses of strncpy
authorJim Meyering <meyering@redhat.com>
Sun, 15 Jul 2012 09:38:51 +0000 (11:38 +0200)
committerJim Meyering <meyering@redhat.com>
Sun, 15 Jul 2012 11:43:49 +0000 (13:43 +0200)
* src/pinky.c (print_entry): Remove unwarranted uses of strncpy.
Instead, use stpcpy and stpncpy.
* src/who.c (print_user): Likewise.
* cfg.mk: Remove strncpy exemptions.

cfg.mk
src/pinky.c
src/who.c

diff --git a/cfg.mk b/cfg.mk
index 6620eafd2ee9dc19df40d6209ee9ea71d0002fd5..790238ca0291598602626f73fa7d46b92ec3da23 100644 (file)
--- a/cfg.mk
+++ b/cfg.mk
@@ -493,6 +493,3 @@ exclude_file_name_regexp--sc_prohibit_test_backticks = \
 # Exempt test.c, since it's nominally shared, and relatively static.
 exclude_file_name_regexp--sc_prohibit_operator_at_end_of_line = \
   ^src/(ptx|test|head)\.c$$
-
-# Exempt pinky and who: their uses of this function appear to be correct.
-exclude_file_name_regexp--sc_prohibit_strncpy = ^src/(pinky|who)\.c$$
index 597bc56c0a28be4fafd42fb1f73b878c117fd502..c01b12427893ab2a0701e3e80898e6cb5e147d50 100644 (file)
@@ -208,21 +208,14 @@ print_entry (const STRUCT_UTMP *utmp_ent)
 #define DEV_DIR_LEN (sizeof (DEV_DIR_WITH_TRAILING_SLASH) - 1)
 
   char line[sizeof (utmp_ent->ut_line) + DEV_DIR_LEN + 1];
+  char *p = line;
 
   /* Copy ut_line into LINE, prepending '/dev/' if ut_line is not
      already an absolute file name.  Some system may put the full,
      absolute file name in ut_line.  */
-  if (utmp_ent->ut_line[0] == '/')
-    {
-      strncpy (line, utmp_ent->ut_line, sizeof (utmp_ent->ut_line));
-      line[sizeof (utmp_ent->ut_line)] = '\0';
-    }
-  else
-    {
-      strcpy (line, DEV_DIR_WITH_TRAILING_SLASH);
-      strncpy (line + DEV_DIR_LEN, utmp_ent->ut_line, sizeof utmp_ent->ut_line);
-      line[DEV_DIR_LEN + sizeof (utmp_ent->ut_line)] = '\0';
-    }
+  if ( ! IS_ABSOLUTE_FILE_NAME (utmp_ent->ut_line))
+    p = stpcpy (p, DEV_DIR_WITH_TRAILING_SLASH);
+  stpncpy (p, utmp_ent->ut_line, sizeof (utmp_ent->ut_line));
 
   if (stat (line, &stats) == 0)
     {
@@ -242,8 +235,7 @@ print_entry (const STRUCT_UTMP *utmp_ent)
       struct passwd *pw;
       char name[UT_USER_SIZE + 1];
 
-      strncpy (name, UT_USER (utmp_ent), UT_USER_SIZE);
-      name[UT_USER_SIZE] = '\0';
+      stpncpy (name, UT_USER (utmp_ent), UT_USER_SIZE);
       pw = getpwnam (name);
       if (pw == NULL)
         /* TRANSLATORS: Real name is unknown; at most 19 characters. */
@@ -284,8 +276,7 @@ print_entry (const STRUCT_UTMP *utmp_ent)
       char *display = NULL;
 
       /* Copy the host name into UT_HOST, and ensure it's nul terminated. */
-      strncpy (ut_host, utmp_ent->ut_host, (int) sizeof (utmp_ent->ut_host));
-      ut_host[sizeof (utmp_ent->ut_host)] = '\0';
+      stpncpy (ut_host, utmp_ent->ut_host, sizeof (utmp_ent->ut_host));
 
       /* Look for an X display.  */
       display = strchr (ut_host, ':');
index c875b1de616cf36f92b8c25a9e62f355fda94ed6..3ad80042920ac70cde723a62062875ab15fdbc7e 100644 (file)
--- a/src/who.c
+++ b/src/who.c
@@ -342,23 +342,15 @@ print_user (const STRUCT_UTMP *utmp_ent, time_t boottime)
 #define DEV_DIR_LEN (sizeof (DEV_DIR_WITH_TRAILING_SLASH) - 1)
 
   char line[sizeof (utmp_ent->ut_line) + DEV_DIR_LEN + 1];
+  char *p = line;
   PIDSTR_DECL_AND_INIT (pidstr, utmp_ent);
 
   /* Copy ut_line into LINE, prepending '/dev/' if ut_line is not
      already an absolute file name.  Some systems may put the full,
      absolute file name in ut_line.  */
-  if (utmp_ent->ut_line[0] == '/')
-    {
-      strncpy (line, utmp_ent->ut_line, sizeof (utmp_ent->ut_line));
-      line[sizeof (utmp_ent->ut_line)] = '\0';
-    }
-  else
-    {
-      strcpy (line, DEV_DIR_WITH_TRAILING_SLASH);
-      strncpy (line + DEV_DIR_LEN, utmp_ent->ut_line,
-               sizeof (utmp_ent->ut_line));
-      line[DEV_DIR_LEN + sizeof (utmp_ent->ut_line)] = '\0';
-    }
+  if ( ! IS_ABSOLUTE_FILE_NAME (utmp_ent->ut_line))
+    p = stpcpy (p, DEV_DIR_WITH_TRAILING_SLASH);
+  stpncpy (p, utmp_ent->ut_line, sizeof (utmp_ent->ut_line));
 
   if (stat (line, &stats) == 0)
     {
@@ -384,8 +376,7 @@ print_user (const STRUCT_UTMP *utmp_ent, time_t boottime)
       char *display = NULL;
 
       /* Copy the host name into UT_HOST, and ensure it's nul terminated. */
-      strncpy (ut_host, utmp_ent->ut_host, sizeof (utmp_ent->ut_host));
-      ut_host[sizeof (utmp_ent->ut_host)] = '\0';
+      stpncpy (ut_host, utmp_ent->ut_host, sizeof (utmp_ent->ut_host));
 
       /* Look for an X display.  */
       display = strchr (ut_host, ':');