Dump9660 (and mk9660). Until we either do something
intelligent with symlinks or put in a switch for things like dump9660, this is of rather limited utility under Unix.
This commit is contained in:
parent
e1dddc0532
commit
7285a491c1
20 changed files with 4375 additions and 0 deletions
84
src/cmd/9660/unix.c
Normal file
84
src/cmd/9660/unix.c
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
#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;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue