84 lines
1.4 KiB
C
84 lines
1.4 KiB
C
#include <u.h>
|
|
#include <libc.h>
|
|
#include <bio.h>
|
|
#include <libsec.h>
|
|
#include <disk.h>
|
|
#include <ctype.h>
|
|
|
|
#include "iso9660.h"
|
|
|
|
#include <grp.h>
|
|
#include <pwd.h>
|
|
|
|
typedef struct Xarg Xarg;
|
|
struct Xarg {
|
|
void (*enm)(char*,char*,XDir*,void*);
|
|
void (*warn)(char*,void*);
|
|
void *arg;
|
|
};
|
|
|
|
static long numericuid(char *user);
|
|
static long numericgid(char *gp);
|
|
|
|
void
|
|
dirtoxdir(XDir *xd, Dir *d)
|
|
{
|
|
/* char buf[NAMELEN+1]; */
|
|
memset(xd, 0, sizeof *xd);
|
|
|
|
xd->name = atom(d->name);
|
|
xd->uid = atom(d->uid);
|
|
xd->gid = atom(d->gid);
|
|
xd->uidno = numericuid(d->uid);
|
|
xd->gidno = numericgid(d->gid);
|
|
xd->mode = d->mode;
|
|
xd->atime = d->atime;
|
|
xd->mtime = d->mtime;
|
|
xd->ctime = 0;
|
|
xd->length = d->length;
|
|
if(xd->mode & CHLINK) {
|
|
xd->mode |= 0777;
|
|
/*xd->symlink = atom(d->symlink); */
|
|
xd->symlink = atom("symlink"); /* XXX: rsc */
|
|
}
|
|
}
|
|
|
|
void
|
|
fdtruncate(int fd, ulong size)
|
|
{
|
|
ftruncate(fd, size);
|
|
|
|
return;
|
|
}
|
|
|
|
static long
|
|
numericuid(char *user)
|
|
{
|
|
struct passwd *pass;
|
|
static int warned = 0;
|
|
|
|
if (! (pass = getpwnam(user))) {
|
|
if (!warned)
|
|
fprint(2, "Warning: getpwnam(3) failed for \"%s\"\n", user);
|
|
warned = 1;
|
|
return 0;
|
|
}
|
|
|
|
return pass->pw_uid;
|
|
}
|
|
|
|
static long
|
|
numericgid(char *gp)
|
|
{
|
|
struct group *gr;
|
|
static int warned = 0;
|
|
|
|
if (! (gr = getgrnam(gp))) {
|
|
if (!warned)
|
|
fprint(2, "Warning: getgrnam(3) failed for \"%s\"\n", gp);
|
|
warned = 1;
|
|
return 0;
|
|
}
|
|
|
|
return gr->gr_gid;
|
|
}
|