Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

elf_loader: add elf_loadmem() to load file from memory

Change-Id: Ib68b0e8b610d45713a2d5480da015cc4295f2676

+38
+26
firmware/elf_loader.c
··· 183 183 close(fd); 184 184 return err; 185 185 } 186 + 187 + int elf_loadmem(const void *elf_buffer, 188 + size_t elf_size, 189 + const struct elf_load_context *ctx, 190 + void **entrypoint) 191 + { 192 + struct elf_loadmem_state state = { 193 + .buffer = elf_buffer, 194 + .size = elf_size, 195 + }; 196 + 197 + return elf_load(elf_read_mem_callback, (intptr_t)&state, ctx, entrypoint); 198 + } 199 + 200 + int elf_read_mem_callback(intptr_t loadmem_state, off_t pos, void *buf, size_t size) 201 + { 202 + struct elf_loadmem_state *state = (void *)loadmem_state; 203 + 204 + if (pos < 0 || (size_t)pos >= state->size) 205 + return -1; 206 + if (state->size - (size_t)pos < size) 207 + return -1; 208 + 209 + memcpy(buf, state->buffer + pos, size); 210 + return 0; 211 + }
+12
firmware/include/elf_loader.h
··· 100 100 const struct elf_load_context *ctx, 101 101 void **entrypoint); 102 102 103 + struct elf_loadmem_state 104 + { 105 + const void *buffer; 106 + size_t size; 107 + }; 108 + 109 + int elf_loadmem(const void *elf_buffer, 110 + size_t elf_size, 111 + const struct elf_load_context *ctx, 112 + void **entrypoint); 113 + int elf_read_mem_callback(intptr_t loadmem_state, off_t pos, void *buf, size_t size); 114 + 103 115 #endif /* __ELF_LOADER_H__ */