Пример #1
0
static int 
   bootread (int fd, void *addr, int size)
{
	int i;

	if (bootseg++ > 0)
		fprintf (stderr, "\b + ");
	fprintf (stderr, "0x%x/%d ", addr + dl_offset, size);

	if (!dl_checksetloadaddr (addr + dl_offset, size, 1))
		return (-1);

#if NGZIP > 0
if(myflags&ZFLAG){
	if(myflags&OFLAG){
		if(lastaddr)dl_loffset +=(unsigned long long)(addr-lastaddr);
		lastaddr=addr; 
		i=0;
		while(i<size)
		{
		int i1;
		int len=min(0x1000,size-i);
		i1=gz_read (fd,dl_Oloadbuffer,len);
		if(i1<0)break;
		highmemcpy(dl_loffset+i,dl_Oloadbuffer,i1);
		i+=i1;
		if(i1<len)break;
		}
	}
	else i = gz_read (fd, addr + dl_offset, size);
	}else
#endif /* NGZIP */
{
	if(myflags&OFLAG){
		if(lastaddr)dl_loffset +=(unsigned long long)(addr-lastaddr);
		lastaddr=addr; 
		i=0;
		while(i<size)
		{
		int i1;
		int len=min(0x1000,size-i);
		i1=read (fd,dl_Oloadbuffer,len);
		if(i1<0)break;
		highmemcpy(dl_loffset+i,dl_Oloadbuffer,i1);
		i+=i1;
		if(i1<len)break;
		}
	}
	else i = read (fd, addr + dl_offset, size);
	}

	if (i < size) {
		if (i >= 0)
			fprintf (stderr, "\nread failed (corrupt object file?)");
		else
			perror ("\nsegment read");
		return (-1);
	}
	return size;
}
Пример #2
0
static long load_bin(int fd, char *buf, int *n, int flags)
{
	unsigned long long addr;
	int size = 2048;
	int n2;
	int count = 0;

	if (flags & OFLAG)
		addr = dl_loffset;
	else
		addr = (void *)dl_offset;

	fprintf (stderr, "(bin)\n");

	dl_minaddr = (long)addr;

	do {
		if (flags & OFLAG) {
			n2 = read(fd, buf, size);
			highmemcpy((long long)addr, (long long)buf, (long long)n2);
		}
		else 
			n2 = read(fd, addr, size);
		addr = (addr + n2);
		count += n2;
	} while (n2 >= size);

	dl_maxaddr = (long)addr;
	printf("\nLoaded %d bytes\n", count);

	return dl_offset;
}