Deleted Added
full compact
i386_copy.c (38764) i386_copy.c (39178)
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);
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
49 return(len - resid);
50}
51
52