i386_copy.c revision 38712
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_readin(int fd, vm_offset_t dest, size_t len) 24{ 25 void *buf; 26 size_t resid, chunk, get, got; 27 28 chunk = min(READIN_BUF, len); 29 buf = malloc(chunk); 30 if (buf == NULL) 31 return(0); 32 33 for (resid = len; resid > 0; resid -= got, dest += got) { 34 get = min(chunk, resid); 35 got = read(fd, buf, get); 36 if (got <= 0) 37 break; 38 vpbcopy(buf, dest, chunk); 39 } 40 free(buf); 41 if (resid != 0) 42 printf("i386_readin: %d bytes short\n", resid); 43 return(len - resid); 44} 45 46 47