i386_copy.c revision 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); 49 return(len - resid); 50} 51 52 53