Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 3315 → Rev 3314

/trunk/uspace/srv/loader/elf_load.c
71,19 → 71,6
static int section_header(elf_ld_t *elf, elf_section_header_t *entry);
static int load_segment(elf_ld_t *elf, elf_segment_header_t *entry);
 
/** Read until the buffer is read in its entirety. */
static int my_read(int fd, char *buf, size_t len)
{
int cnt = 0;
do {
buf += cnt;
len -= cnt;
cnt = read(fd, buf, len);
} while ((cnt > 0) && ((len - cnt) > 0));
 
return cnt;
}
 
/** Load ELF binary from a file.
*
* Load an ELF binary from the specified file. If the file is
169,7 → 156,7
elf_header_t *header = &header_buf;
int i, rc;
 
rc = my_read(elf->fd, header, sizeof(elf_header_t));
rc = read(elf->fd, header, sizeof(elf_header_t));
if (rc < 0) {
printf("read error\n");
return EE_INVALID;
236,8 → 223,7
lseek(elf->fd, header->e_phoff
+ i * sizeof(elf_segment_header_t), SEEK_SET);
 
rc = my_read(elf->fd, &segment_hdr,
sizeof(elf_segment_header_t));
rc = read(elf->fd, &segment_hdr, sizeof(elf_segment_header_t));
if (rc < 0) {
printf("read error\n");
return EE_INVALID;
258,8 → 244,7
lseek(elf->fd, header->e_shoff
+ i * sizeof(elf_section_header_t), SEEK_SET);
 
rc = my_read(elf->fd, &section_hdr,
sizeof(elf_section_header_t));
rc = read(elf->fd, &section_hdr, sizeof(elf_section_header_t));
if (rc < 0) {
printf("read error\n");
return EE_INVALID;
376,8 → 361,8
* For the course of loading, the area needs to be readable
* and writeable.
*/
a = as_area_create((uint8_t *)base + bias, mem_sz,
AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE);
a = as_area_create((uint8_t *)base + bias,
mem_sz, AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE);
if (a == (void *)(-1)) {
printf("memory mapping failed\n");
return EE_MEMORY;
413,7 → 398,7
if (now > left) now = left;
 
// printf("read %d...", now);
rc = my_read(elf->fd, dp, now);
rc = read(elf->fd, dp, now);
// printf("->%d\n", rc);
 
if (rc < 0) {