From 7ce6b131573accf4fbc4b2c26794fb90f6b1a44e Mon Sep 17 00:00:00 2001
From: James Youngman <jay@gnu.org>
Date: Sat, 2 Jan 2016 22:58:59 +0000
Subject: [PATCH 025/224] lib: Update the width of the st_nlink field and fix
 some compiler warnings.

* lib/listfile.h (list_file): Make the relname parameter const.
* lib/listfile.c (list_file): Make the relname parameter const.
Remove the unused local variable inode_field_width.  Update
nlink_width with the greatest width of the st_nlink field, and
print the field using the maximum width (as we do for other
fields).
---
 lib/listfile.c | 27 ++++++++++++++++++++++++---
 lib/listfile.h |  2 +-
 2 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/lib/listfile.c b/lib/listfile.c
index 4b7d4b22..c6c86091 100644
--- a/lib/listfile.c
+++ b/lib/listfile.c
@@ -111,7 +111,7 @@ static bool print_num(FILE *stream, unsigned long num, int *width)
 void
 list_file (const char *name,
            int dir_fd,
-           char *relname,
+           const char *relname,
            const struct stat *statp,
            time_t current_time,
            int output_block_size,
@@ -126,7 +126,6 @@ list_file (const char *name,
   bool output_good = true;
   int chars_out;
   int failed_at = 000;
-  int inode_field_width;
 
 #if HAVE_ST_DM_MODE
   /* Cray DMF: look at the file's migrated, not real, status */
@@ -179,13 +178,35 @@ list_file (const char *name,
           output_good = false;
           failed_at = 250;
         }
+    }
+  if (output_good)
+    {
       /* modebuf includes the space between the mode and the number of links,
          as the POSIX "optional alternate access method flag".  */
-      if (fprintf (stream, "%s%3lu ", modebuf, (unsigned long) statp->st_nlink) < 0)
+      if (fputs (modebuf, stream) < 0)
+        {
+          output_good = false;
+          failed_at = 275;
+        }
+    }
+  if (output_good)
+    {
+      /* This format used to end in a space, but the output of "ls"
+         has only one space between the link count and the owner name,
+         so we removed the trailing space.  Happily this also makes it
+         easier to update nlink_width. */
+      chars_out =  fprintf (stream, "%*lu",
+			    nlink_width, (unsigned long) statp->st_nlink);
+      if (chars_out < 0)
         {
           output_good = false;
           failed_at = 300;
         }
+      else
+	{
+	  if (chars_out > nlink_width)
+	    nlink_width = chars_out;
+	}
     }
 
   if (output_good)
diff --git a/lib/listfile.h b/lib/listfile.h
index 9ee71a2d..2e151659 100644
--- a/lib/listfile.h
+++ b/lib/listfile.h
@@ -19,5 +19,5 @@
 
 #if !defined LISTFILE_H
 # define LISTFILE_H
-void list_file (const char *name, int dir_fd, char *relname, const struct stat *statp, time_t current_time, int output_block_size, int literal_control_chars, FILE *stream);
+void list_file (const char *name, int dir_fd, const char *relname, const struct stat *statp, time_t current_time, int output_block_size, int literal_control_chars, FILE *stream);
 #endif
-- 
2.19.1

