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