i386_copy.c revision 38764
1/*
2 * mjs copyright
3 */
4/*
5 * MD primitives supporting placement of module data
6 *
7 * XXX should check load address/size against memory top.
8 */
9#include <stand.h>
10
11#include "libi386.h"
12
13#define READIN_BUF	4096
14
15int
16i386_copyin(void *src, vm_offset_t dest, size_t len)
17{
18    vpbcopy(src, dest, len);
19    return(len);
20}
21
22int
23i386_copyout(vm_offset_t src, void *dest, size_t len)
24{
25    pvbcopy(src, dest, len);
26    return(len);
27}
28
29
30int
31i386_readin(int fd, vm_offset_t dest, size_t len)
32{
33    void	*buf;
34    size_t	resid, chunk, get, got;
35
36    chunk = min(READIN_BUF, len);
37    buf = malloc(chunk);
38    if (buf == NULL)
39	return(0);
40
41    for (resid = len; resid > 0; resid -= got, dest += got) {
42	get = min(chunk, resid);
43	got = read(fd, buf, get);
44	if (got <= 0)
45	    break;
46	vpbcopy(buf, dest, chunk);
47    }
48    free(buf);
49    if (resid != 0)
50	printf("i386_readin: %d bytes short\n", resid);
51    return(len - resid);
52}
53
54
55