i386_copy.c revision 38764
119304Speter/* 219304Speter * mjs copyright 319304Speter */ 419304Speter/* 519304Speter * MD primitives supporting placement of module data 619304Speter * 719304Speter * XXX should check load address/size against memory top. 819304Speter */ 919304Speter#include <stand.h> 1019304Speter 1119304Speter#include "libi386.h" 1219304Speter 13254225Speter#define READIN_BUF 4096 1419304Speter 1519304Speterint 1619304Speteri386_copyin(void *src, vm_offset_t dest, size_t len) 1719304Speter{ 1819304Speter vpbcopy(src, dest, len); 1919304Speter return(len); 2019304Speter} 2119304Speter 2219304Speterint 2319304Speteri386_copyout(vm_offset_t src, void *dest, size_t len) 2419304Speter{ 2519304Speter pvbcopy(src, dest, len); 2619304Speter return(len); 2719304Speter} 2819304Speter 2919304Speter 3019304Speterint 3119304Speteri386_readin(int fd, vm_offset_t dest, size_t len) 3219304Speter{ 3319304Speter void *buf; 34254225Speter size_t resid, chunk, get, got; 3519304Speter 3619304Speter chunk = min(READIN_BUF, len); 3719304Speter 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 55