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 <errno.h>
3
#include	"lib.h"
4
#include	"dat.h"
5
#include	"fns.h"
6
#include	"error.h"
7
 
8
#undef pread
9
#undef pwrite
10
 
11
Chan*
12
lfdchan(int fd)
13
{
14
	Chan *c;
15
 
16
	c = newchan();
17
	c->type = devno('L', 0);
18
	c->aux = (void*)(uintptr)fd;
19
	c->name = newcname("fd");
20
	c->mode = ORDWR;
21
	c->qid.type = 0;
22
	c->qid.path = 0;
23
	c->qid.vers = 0;
24
	c->dev = 0;
25
	c->offset = 0;
26
	return c;
27
}
28
 
29
int
30
lfdfd(int fd)
31
{
32
	return newfd(lfdchan(fd));
33
}
34
 
35
static Chan*
36
lfdattach(char *x)
37
{
38
	USED(x);
39
 
40
	error(Egreg);
41
	return nil;
42
}
43
 
44
static Walkqid*
45
lfdwalk(Chan *c, Chan *nc, char **name, int nname)
46
{
47
	USED(c);
48
	USED(nc);
49
	USED(name);
50
	USED(nname);
51
 
52
	error(Egreg);
53
	return nil;
54
}
55
 
56
static int
57
lfdstat(Chan *c, uchar *dp, int n)
58
{
59
	USED(c);
60
	USED(dp);
61
	USED(n);
62
	error(Egreg);
63
	return -1;
64
}
65
 
66
static Chan*
67
lfdopen(Chan *c, int omode)
68
{
69
	USED(c);
70
	USED(omode);
71
 
72
	error(Egreg);
73
	return nil;
74
}
75
 
76
static void
77
lfdclose(Chan *c)
78
{
79
	close((int)(uintptr)c->aux);
80
}
81
 
82
static long
83
lfdread(Chan *c, void *buf, long n, vlong off)
84
{
85
	USED(off);	/* can't pread on pipes */
86
	n = read((int)(uintptr)c->aux, buf, n);
87
	if(n < 0){
88
		iprint("error %d\n", errno);
89
		oserror();
90
	}
91
	return n;
92
}
93
 
94
static long
95
lfdwrite(Chan *c, void *buf, long n, vlong off)
96
{
97
	USED(off);	/* can't pread on pipes */
98
 
99
	n = write((int)(uintptr)c->aux, buf, n);
100
	if(n < 0){
101
		iprint("error %d\n", errno);
102
		oserror();
103
	}
104
	return n;
105
}
106
 
107
Dev lfddevtab = {
108
	'L',
109
	"lfd",
110
 
111
	devreset,
112
	devinit,
113
	devshutdown,
114
	lfdattach,
115
	lfdwalk,
116
	lfdstat,
117
	lfdopen,
118
	devcreate,
119
	lfdclose,
120
	lfdread,
121
	devbread,
122
	lfdwrite,
123
	devbwrite,
124
	devremove,
125
	devwstat,
126
};