plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

unix.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 }