URI:
       tunix.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tunix.c (1404B)
       ---
            1 #include <u.h>
            2 #include <libc.h>
            3 #include <bio.h>
            4 #include <libsec.h>
            5 #include <disk.h>
            6 #include <ctype.h>
            7 
            8 #include "iso9660.h"
            9 
           10 #include <grp.h>
           11 #include <pwd.h>
           12 
           13 typedef struct Xarg Xarg;
           14 struct Xarg {
           15         void (*enm)(char*,char*,XDir*,void*);
           16         void (*warn)(char*,void*);
           17         void *arg;
           18 };
           19 
           20 static long numericuid(char *user);
           21 static long numericgid(char *gp);
           22 
           23 void
           24 dirtoxdir(XDir *xd, Dir *d)
           25 {
           26         /*        char buf[NAMELEN+1]; */
           27         memset(xd, 0, sizeof *xd);
           28 
           29         xd->name = atom(d->name);
           30         xd->uid = atom(d->uid);
           31         xd->gid = atom(d->gid);
           32         xd->uidno = numericuid(d->uid);
           33         xd->gidno = numericgid(d->gid);
           34         xd->mode = d->mode;
           35         xd->atime = d->atime;
           36         xd->mtime = d->mtime;
           37         xd->ctime = 0;
           38         xd->length = d->length;
           39         if(xd->mode & CHLINK) {
           40                 xd->mode |= 0777;
           41                 /*xd->symlink = atom(d->symlink); */
           42                 xd->symlink = atom("symlink");                /* XXX: rsc */
           43         }
           44 }
           45 
           46 void
           47 fdtruncate(int fd, ulong size)
           48 {
           49         ftruncate(fd, size);
           50 
           51         return;
           52 }
           53 
           54 static long
           55 numericuid(char *user)
           56 {
           57         struct passwd *pass;
           58         static int warned = 0;
           59 
           60         if (! (pass = getpwnam(user))) {
           61                 if (!warned)
           62                         fprint(2, "Warning: getpwnam(3) failed for \"%s\"\n", user);
           63                 warned = 1;
           64                 return 0;
           65         }
           66 
           67         return pass->pw_uid;
           68 }
           69 
           70 static long
           71 numericgid(char *gp)
           72 {
           73         struct group *gr;
           74         static int warned = 0;
           75 
           76         if (! (gr = getgrnam(gp))) {
           77                 if (!warned)
           78                         fprint(2, "Warning: getgrnam(3) failed for \"%s\"\n", gp);
           79                 warned = 1;
           80                 return 0;
           81         }
           82 
           83         return gr->gr_gid;
           84 }