i386_copy.c revision 38712
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_readin(int fd, vm_offset_t dest, size_t len)
24{
25    void	*buf;
26    size_t	resid, chunk, get, got;
27
28    chunk = min(READIN_BUF, len);
29    buf = malloc(chunk);
30    if (buf == NULL)
31	return(0);
32
33    for (resid = len; resid > 0; resid -= got, dest += got) {
34	get = min(chunk, resid);
35	got = read(fd, buf, get);
36	if (got <= 0)
37	    break;
38	vpbcopy(buf, dest, chunk);
39    }
40    free(buf);
41    if (resid != 0)
42	printf("i386_readin: %d bytes short\n", resid);
43    return(len - resid);
44}
45
46
47