xref: /plan9-contrib/sys/src/libdynld/dynloadfd.c (revision 50f1557124e7462c91000f47378638e1dd5a6016)
1*50f15571SDavid du Colombier #include <u.h>
2*50f15571SDavid du Colombier #include <libc.h>
3*50f15571SDavid du Colombier #include <a.out.h>
4*50f15571SDavid du Colombier #include <dynld.h>
5*50f15571SDavid du Colombier 
6*50f15571SDavid du Colombier typedef struct Fd Fd;
7*50f15571SDavid du Colombier struct Fd {
8*50f15571SDavid du Colombier 	int	fd;
9*50f15571SDavid du Colombier };
10*50f15571SDavid du Colombier 
11*50f15571SDavid du Colombier static long
readfd(void * a,void * buf,long nbytes)12*50f15571SDavid du Colombier readfd(void *a, void *buf, long nbytes)
13*50f15571SDavid du Colombier {
14*50f15571SDavid du Colombier 	return read(((Fd*)a)->fd, buf, nbytes);
15*50f15571SDavid du Colombier }
16*50f15571SDavid du Colombier 
17*50f15571SDavid du Colombier static vlong
seekfd(void * a,vlong off,int t)18*50f15571SDavid du Colombier seekfd(void *a, vlong off, int t)
19*50f15571SDavid du Colombier {
20*50f15571SDavid du Colombier 	return seek(((Fd*)a)->fd, off, t);
21*50f15571SDavid du Colombier }
22*50f15571SDavid du Colombier 
23*50f15571SDavid du Colombier static void
errfd(char * s)24*50f15571SDavid du Colombier errfd(char *s)
25*50f15571SDavid du Colombier {
26*50f15571SDavid du Colombier 	werrstr("%s", s);
27*50f15571SDavid du Colombier }
28*50f15571SDavid du Colombier 
29*50f15571SDavid du Colombier Dynobj*
dynloadfd(int fd,Dynsym * sym,int nsym,ulong maxsize)30*50f15571SDavid du Colombier dynloadfd(int fd, Dynsym *sym, int nsym, ulong maxsize)
31*50f15571SDavid du Colombier {
32*50f15571SDavid du Colombier 	Fd f;
33*50f15571SDavid du Colombier 
34*50f15571SDavid du Colombier 	f.fd = fd;
35*50f15571SDavid du Colombier 	return dynloadgen(&f, readfd, seekfd, errfd, sym, nsym, maxsize);
36*50f15571SDavid du Colombier }
37