Deleted Added
full compact
i386_copy.c (39178) i386_copy.c (39441)
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"
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#include "btxv86.h"
12
13#define READIN_BUF 4096
14
15int
16i386_copyin(void *src, vm_offset_t dest, size_t len)
17{
13
14#define READIN_BUF 4096
15
16int
17i386_copyin(void *src, vm_offset_t dest, size_t len)
18{
18 vpbcopy(src, dest, len);
19 if (dest + len >= memtop)
20 return(0);
21
22 bcopy(src, PTOV(dest), len);
19 return(len);
20}
21
22int
23i386_copyout(vm_offset_t src, void *dest, size_t len)
24{
23 return(len);
24}
25
26int
27i386_copyout(vm_offset_t src, void *dest, size_t len)
28{
25 pvbcopy(src, dest, len);
29 if (src + len >= memtop)
30 return(0);
31
32 bcopy(PTOV(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
33 return(len);
34}
35
36
37int
38i386_readin(int fd, vm_offset_t dest, size_t len)
39{
40 void *buf;
41 size_t resid, chunk, get, got;
42
43 if (dest + len >= memtop)
44 return(0);
45
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 chunk = min(READIN_BUF, len);
47 buf = malloc(chunk);
48 if (buf == NULL)
49 return(0);
50
51 for (resid = len; resid > 0; resid -= got, dest += got) {
52 get = min(chunk, resid);
53 got = read(fd, buf, get);
54 if (got <= 0)
55 break;
46 vpbcopy(buf, dest, chunk);
56 bcopy(buf, PTOV(dest), chunk);
47 }
48 free(buf);
49 return(len - resid);
50}
51
52
57 }
58 free(buf);
59 return(len - resid);
60}
61
62