changeset 1040:7dfad5f21984 draft

Switch ls from utoa to sprintf.
author Rob Landley <rob@landley.net>
date Mon, 02 Sep 2013 22:20:29 -0500
parents 75f5e63d79c3
children d3f9e55e350a
files toys/posix/ls.c
diffstat 1 files changed, 17 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/toys/posix/ls.c	Mon Sep 02 18:48:59 2013 -0500
+++ b/toys/posix/ls.c	Mon Sep 02 22:20:29 2013 -0500
@@ -58,9 +58,7 @@
 
   unsigned screen_width;
   int nl_title;
-
-  // group and user can make overlapping use of the utoa() buf, so move it
-  char uid_buf[12];
+  char uid_buf[12], gid_buf[12];
 )
 
 void dlist_to_dirtree(struct dirtree *parent)
@@ -92,14 +90,17 @@
 static char *getusername(uid_t uid)
 {
   struct passwd *pw = getpwuid(uid);
-  utoa_to_buf(uid, TT.uid_buf, 12);
+
+  sprintf(TT.uid_buf, "%u", (unsigned)uid);
   return pw ? pw->pw_name : TT.uid_buf;
 }
 
 static char *getgroupname(gid_t gid)
 {
   struct group *gr = getgrgid(gid);
-  return gr ? gr->gr_name : utoa(gid);
+
+  sprintf(TT.gid_buf, "%u", (unsigned)gid);
+  return gr ? gr->gr_name : TT.gid_buf;
 }
 
 // Figure out size of printable entry fields for display indent/wrap
@@ -117,8 +118,10 @@
   if (flags & (FLAG_l|FLAG_o|FLAG_n|FLAG_g)) {
     unsigned fn = flags & FLAG_n;
     len[2] = numlen(st->st_nlink);
-    len[3] = strlen(fn ? utoa(st->st_uid) : getusername(st->st_uid));
-    len[4] = strlen(fn ? utoa(st->st_gid) : getgroupname(st->st_gid));
+    len[3] = fn ? snprintf(0, 0, "%u", (unsigned)st->st_uid)
+                : strlen(getusername(st->st_uid));
+    len[4] = fn ? snprintf(0, 0, "%u", (unsigned)st->st_gid)
+                : strlen(getgroupname(st->st_gid));
     if (S_ISBLK(st->st_mode) || S_ISCHR(st->st_mode)) {
       // cheating slightly here: assuming minor is always 3 digits to avoid
       // tracking another column
@@ -356,22 +359,18 @@
 
       mode_to_string(mode, perm);
 
-      tm = localtime(&(st->st_mtime));
-      strftime(thyme, sizeof(thyme), "%F %H:%M", tm);
-
       if (flags&FLAG_o) grp = grpad = toybuf+256;
       else {
-        grp = (flags&FLAG_n) ? utoa(st->st_gid) : getgroupname(st->st_gid);
+        sprintf(thyme, "%u", (unsigned)st->st_gid);
+        grp = (flags&FLAG_n) ? thyme : getgroupname(st->st_gid);
         grpad = toybuf+256-(totals[4]-len[4]);
       }
 
       if (flags&FLAG_g) usr = upad = toybuf+256;
       else {
         upad = toybuf+255-(totals[3]-len[3]);
-        if (flags&FLAG_n) {
-          usr = TT.uid_buf;
-          utoa_to_buf(st->st_uid, TT.uid_buf, 12);
-        } else usr = getusername(st->st_uid);
+        if (flags&FLAG_n) sprintf(usr = TT.uid_buf, "%u", (unsigned)st->st_uid);
+        else usr = getusername(st->st_uid);
       }
 
       // Coerce the st types into something we know we can print.
@@ -381,6 +380,9 @@
       if (S_ISCHR(st->st_mode) || S_ISBLK(st->st_mode))
         printf("% *d,% 4d", totals[5]-4, major(st->st_rdev),minor(st->st_rdev));
       else printf("% *"PRId64, totals[5]+1, (int64_t)st->st_size);
+
+      tm = localtime(&(st->st_mtime));
+      strftime(thyme, sizeof(thyme), "%F %H:%M", tm);
       xprintf(" %s ", thyme);
     }