Make find accept numeric uid/gid, and simplify makedevs using the new infrastructure.
authorRob Landley <rob@landley.net>
Thu, 12 Mar 2015 19:21:33 +0000 (14:21 -0500)
committerRob Landley <rob@landley.net>
Thu, 12 Mar 2015 19:21:33 +0000 (14:21 -0500)
toys/other/makedevs.c
toys/posix/find.c

index f6e7ece..0d20a57 100644 (file)
@@ -41,7 +41,7 @@ GLOBALS(
 
 void makedevs_main()
 {
-  int value, fd = 0, line_no, i;
+  int fd = 0, line_no, i;
   char *line = NULL;
 
   // Open file and chdir, verbosely
@@ -78,27 +78,8 @@ void makedevs_main()
       continue;
     } else mode |= (mode_t[]){S_IFIFO, S_IFCHR, S_IFBLK, 0, 0}[i];
 
-    if (*user) {
-      struct passwd *usr;
-
-      if (!(usr = getpwnam(user)) && isdigit(*user)) {
-        sscanf(user, "%u", &value);
-        usr = xgetpwuid(value);
-      }
-      if (!usr) error_exit("bad user '%s'", user);
-      uid = usr->pw_uid;
-    } else uid = getuid();
-
-    if (*group) {
-      struct group *grp;
-
-      if (!(grp = getgrnam(group)) && isdigit(*group)) {
-        sscanf (group, "%u", &value);
-        grp = getgrgid(value);
-      }
-      if (!grp) error_exit("bad group '%s'", group);
-      gid = grp->gr_gid;
-    } else gid = getgid();
+    uid = *user ? xgetpwnamid(user)->pw_uid : getuid();
+    gid = *group ? xgetgrnamid(group)->gr_gid : getgid();
 
     while (*node == '/') node++; // using relative path
 
index 6c45a21..3607874 100644 (file)
@@ -371,8 +371,8 @@ static int do_find(struct dirtree *new)
           udl = xmalloc(sizeof(*udl));
           dlist_add_nomalloc(&TT.argdata, (void *)udl);
 
-          if (*s == 'u') udl->u.uid = xgetpwnam(ss[1])->pw_uid;
-          else if (*s == 'g') udl->u.gid = xgetgrnam(ss[1])->gr_gid;
+          if (*s == 'u') udl->u.uid = xgetpwnamid(ss[1])->pw_uid;
+          else if (*s == 'g') udl->u.gid = xgetgrnamid(ss[1])->gr_gid;
           else {
             struct stat st;