1 7285a491 2004-06-17 devnull #include <u.h>
2 7285a491 2004-06-17 devnull #include <libc.h>
3 7285a491 2004-06-17 devnull #include <bio.h>
4 7285a491 2004-06-17 devnull #include <libsec.h>
5 7285a491 2004-06-17 devnull #include <disk.h>
6 7285a491 2004-06-17 devnull #include <ctype.h>
8 7285a491 2004-06-17 devnull #include "iso9660.h"
10 7285a491 2004-06-17 devnull #include <grp.h>
11 7285a491 2004-06-17 devnull #include <pwd.h>
13 7285a491 2004-06-17 devnull typedef struct Xarg Xarg;
14 7285a491 2004-06-17 devnull struct Xarg {
15 7285a491 2004-06-17 devnull void (*enm)(char*,char*,XDir*,void*);
16 7285a491 2004-06-17 devnull void (*warn)(char*,void*);
17 7285a491 2004-06-17 devnull void *arg;
20 7285a491 2004-06-17 devnull static long numericuid(char *user);
21 7285a491 2004-06-17 devnull static long numericgid(char *gp);
24 7285a491 2004-06-17 devnull dirtoxdir(XDir *xd, Dir *d)
26 cbeb0b26 2006-04-01 devnull /* char buf[NAMELEN+1]; */
27 7285a491 2004-06-17 devnull memset(xd, 0, sizeof *xd);
29 7285a491 2004-06-17 devnull xd->name = atom(d->name);
30 7285a491 2004-06-17 devnull xd->uid = atom(d->uid);
31 7285a491 2004-06-17 devnull xd->gid = atom(d->gid);
32 7285a491 2004-06-17 devnull xd->uidno = numericuid(d->uid);
33 7285a491 2004-06-17 devnull xd->gidno = numericgid(d->gid);
34 7285a491 2004-06-17 devnull xd->mode = d->mode;
35 7285a491 2004-06-17 devnull xd->atime = d->atime;
36 7285a491 2004-06-17 devnull xd->mtime = d->mtime;
37 7285a491 2004-06-17 devnull xd->ctime = 0;
38 7285a491 2004-06-17 devnull xd->length = d->length;
39 7285a491 2004-06-17 devnull if(xd->mode & CHLINK) {
40 7285a491 2004-06-17 devnull xd->mode |= 0777;
41 cbeb0b26 2006-04-01 devnull /*xd->symlink = atom(d->symlink); */
42 cbeb0b26 2006-04-01 devnull xd->symlink = atom("symlink"); /* XXX: rsc */
47 7285a491 2004-06-17 devnull fdtruncate(int fd, ulong size)
49 7285a491 2004-06-17 devnull ftruncate(fd, size);
54 7285a491 2004-06-17 devnull static long
55 7285a491 2004-06-17 devnull numericuid(char *user)
57 7285a491 2004-06-17 devnull struct passwd *pass;
58 7285a491 2004-06-17 devnull static int warned = 0;
60 7285a491 2004-06-17 devnull if (! (pass = getpwnam(user))) {
61 7285a491 2004-06-17 devnull if (!warned)
62 7285a491 2004-06-17 devnull fprint(2, "Warning: getpwnam(3) failed for \"%s\"\n", user);
63 7285a491 2004-06-17 devnull warned = 1;
64 7285a491 2004-06-17 devnull return 0;
67 7285a491 2004-06-17 devnull return pass->pw_uid;
70 7285a491 2004-06-17 devnull static long
71 7285a491 2004-06-17 devnull numericgid(char *gp)
73 7285a491 2004-06-17 devnull struct group *gr;
74 7285a491 2004-06-17 devnull static int warned = 0;
76 7285a491 2004-06-17 devnull if (! (gr = getgrnam(gp))) {
77 7285a491 2004-06-17 devnull if (!warned)
78 7285a491 2004-06-17 devnull fprint(2, "Warning: getgrnam(3) failed for \"%s\"\n", gp);
79 7285a491 2004-06-17 devnull warned = 1;
80 7285a491 2004-06-17 devnull return 0;
83 7285a491 2004-06-17 devnull return gr->gr_gid;