11#include "elf_loader_common.h"
24static void *elf_loader_reader_read_elf_file_stdlib_allocation_callback(
25 void *userdata,
void *pointer, ptrdiff_t old_size, ptrdiff_t new_size)
36 new_ptr = realloc(pointer, new_size);
44static int elf_loader_reader_read_elf_file_stdio_read_callback(
51 if ( !procinfo->m_fp )
53 for ( i = 0; i < segm_count; i += 1 )
55 if ( fseek(procinfo->m_fp, segm_info[i].m_segment_offset, SEEK_SET) )
59 if ( ftell(procinfo->m_fp) != segm_info[i].m_segment_offset )
63 if ( fread(segm_info[i].m_segment_addr, segm_info[i].m_segment_size, 1, procinfo->m_fp) != 1 )
72elf_loader_reader_read_elf_file_stdio_result_callback(
void *userdata,
void *pointer, ptrdiff_t pointer_size,
int errval)
77 procinfo->m_resultbuf.m_buf = pointer;
78 procinfo->m_resultbuf.m_bufsize = pointer_size;
79 procinfo->m_resultbuf.m_result = errval;
82int elf_loader_reader_read_elf_file_stdio(
87 procinfo.m_reader_info.m_userdata = &procinfo;
88 procinfo.m_reader_info.m_alloc_callback = elf_loader_reader_read_elf_file_stdlib_allocation_callback;
89 procinfo.m_reader_info.m_read_callback = elf_loader_reader_read_elf_file_stdio_read_callback;
90 procinfo.m_reader_info.m_result_callback = elf_loader_reader_read_elf_file_stdio_result_callback;
91 procinfo.m_fp = fopen(filename, flags);
94 elf_loader_reader_read_elf_file(&procinfo.m_reader_info);
97 fclose(procinfo.m_fp);
102 return procinfo.m_resultbuf.m_result;