xref: /inferno-os/emu/port/devtab.c (revision d0e1d143ef6f03c75c008c7ec648859dd260cbab)
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