xref: /inferno-os/emu/port/devtab.c (revision cbfacb4e903227dde62ad60b129dc2e3569913fa)
1*cbfacb4eSforsyth #include	"dat.h"
2*cbfacb4eSforsyth #include	"fns.h"
3*cbfacb4eSforsyth #include	"error.h"
4*cbfacb4eSforsyth 
5*cbfacb4eSforsyth extern Dev* devtab[];
6*cbfacb4eSforsyth 
7*cbfacb4eSforsyth long
devtabread(Chan * c,void * buf,long n,vlong off)8*cbfacb4eSforsyth devtabread(Chan *c, void* buf, long n, vlong off)
9560dc2e2Sforsyth {
10*cbfacb4eSforsyth 	int i;
11*cbfacb4eSforsyth 	Dev *dev;
12*cbfacb4eSforsyth 	char *alloc, *e, *p;
13*cbfacb4eSforsyth 
14*cbfacb4eSforsyth 	USED(c);
15*cbfacb4eSforsyth 	alloc = malloc(READSTR);
16*cbfacb4eSforsyth 	if(alloc == nil)
17*cbfacb4eSforsyth 		error(Enomem);
18*cbfacb4eSforsyth 
19*cbfacb4eSforsyth 	p = alloc;
20*cbfacb4eSforsyth 	e = p + READSTR;
21*cbfacb4eSforsyth 	for(i = 0; devtab[i] != nil; i++){
22*cbfacb4eSforsyth 		dev = devtab[i];
23*cbfacb4eSforsyth 		p = seprint(p, e, "#%C %s\n", dev->dc, dev->name);
24*cbfacb4eSforsyth 	}
25*cbfacb4eSforsyth 
26*cbfacb4eSforsyth 	if(waserror()){
27*cbfacb4eSforsyth 		free(alloc);
28*cbfacb4eSforsyth 		nexterror();
29*cbfacb4eSforsyth 	}
30*cbfacb4eSforsyth 	n = readstr(off, buf, n, alloc);
31*cbfacb4eSforsyth 	free(alloc);
32*cbfacb4eSforsyth 	poperror();
33*cbfacb4eSforsyth 
34*cbfacb4eSforsyth 	return n;
35560dc2e2Sforsyth }
36