summaryrefslogtreecommitdiff
path: root/libdynld/dynloadfd.c
blob: 1241cffcd7781dee3033472b9cf8c6da95f92afc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "lib9.h"
#include <a.out.h>
#include <dynld.h>

typedef struct Fd Fd;
struct Fd {
	int	fd;
};

static long
readfd(void *a, void *buf, long nbytes)
{
	return read(((Fd*)a)->fd, buf, nbytes);
}

static vlong
seekfd(void *a, vlong off, int t)
{
	return seek(((Fd*)a)->fd, off, t);
}

static void
errfd(char *s)
{
	werrstr("%s", s);
}

Dynobj*
dynloadfd(int fd, Dynsym *sym, int nsym, ulong maxsize)
{
	Fd f;

	f.fd = fd;
	return dynloadgen(&f, readfd, seekfd, errfd, sym, nsym, maxsize);
}