Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include <bio.h>
4
#include <libsec.h>
5
#include <libproto.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
	}
43
};
44
 
45
void
46
fdtruncate(int fd, ulong size)
47
{
48
	ftruncate(fd, size);
49
 
50
	return;
51
}
52
 
53
static long
54
numericuid(char *user)
55
{
56
	struct passwd *pass;
57
	static int warned = 0;
58
 
59
	if (! (pass = getpwnam(user))) {
60
		if (!warned)
61
			fprint(2, "Warning: getpwnam(3) failed for \"%s\"\n", user);
62
		warned = 1;
63
		return 0;
64
	}
65
 
66
	return pass->pw_uid;
67
}
68
 
69
static long
70
numericgid(char *gp)
71
{
72
	struct group *gr;
73
	static int warned = 0;
74
 
75
	if (! (gr = getgrnam(gp))) {
76
		if (!warned)
77
			fprint(2, "Warning: getgrnam(3) failed for \"%s\"\n", gp);
78
		warned = 1;
79
		return 0;
80
	}
81
 
82
	return gr->gr_gid;
83
}