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
|