bdk: remove sd mounts from ianos and check if sd is mounted in sd ops

This commit is contained in:
CTCaer 2022-02-15 00:17:53 +02:00
parent 73d38e1183
commit ce8d1eca91
2 changed files with 13 additions and 10 deletions

View file

@ -74,19 +74,16 @@ uintptr_t ianos_loader(char *path, elfType_t type, void *moduleConfig)
el_ctx ctx; el_ctx ctx;
uintptr_t epaddr = 0; uintptr_t epaddr = 0;
if (!sd_mount())
goto elfLoadFinalOut;
// Read library. // Read library.
fileBuf = sd_file_read(path, NULL); fileBuf = sd_file_read(path, NULL);
if (!fileBuf) if (!fileBuf)
goto elfLoadFinalOut; goto out;
ctx.pread = _ianos_read_cb; ctx.pread = _ianos_read_cb;
if (el_init(&ctx)) if (el_init(&ctx))
goto elfLoadFinalOut; goto out;
// Set our relocated library's buffer. // Set our relocated library's buffer.
switch (type & 0xFFFF) switch (type & 0xFFFF)
@ -100,15 +97,15 @@ uintptr_t ianos_loader(char *path, elfType_t type, void *moduleConfig)
} }
if (!elfBuf) if (!elfBuf)
goto elfLoadFinalOut; goto out;
// Load and relocate library. // Load and relocate library.
ctx.base_load_vaddr = ctx.base_load_paddr = (uintptr_t)elfBuf; ctx.base_load_vaddr = ctx.base_load_paddr = (uintptr_t)elfBuf;
if (el_load(&ctx, _ianos_alloc_cb)) if (el_load(&ctx, _ianos_alloc_cb))
goto elfFreeOut; goto out_free;
if (el_relocate(&ctx)) if (el_relocate(&ctx))
goto elfFreeOut; goto out_free;
// Launch. // Launch.
epaddr = ctx.ehdr.e_entry + (uintptr_t)elfBuf; epaddr = ctx.ehdr.e_entry + (uintptr_t)elfBuf;
@ -116,11 +113,11 @@ uintptr_t ianos_loader(char *path, elfType_t type, void *moduleConfig)
_ianos_call_ep(ep, moduleConfig); _ianos_call_ep(ep, moduleConfig);
elfFreeOut: out_free:
free(fileBuf); free(fileBuf);
elfBuf = NULL; elfBuf = NULL;
fileBuf = NULL; fileBuf = NULL;
elfLoadFinalOut: out:
return epaddr; return epaddr;
} }

View file

@ -210,6 +210,9 @@ bool sd_is_gpt()
void *sd_file_read(const char *path, u32 *fsize) void *sd_file_read(const char *path, u32 *fsize)
{ {
FIL fp; FIL fp;
if (!sd_get_card_mounted())
return NULL;
if (f_open(&fp, path, FA_READ) != FR_OK) if (f_open(&fp, path, FA_READ) != FR_OK)
return NULL; return NULL;
@ -236,6 +239,9 @@ int sd_save_to_file(void *buf, u32 size, const char *filename)
{ {
FIL fp; FIL fp;
u32 res = 0; u32 res = 0;
if (!sd_get_card_mounted())
return NULL;
res = f_open(&fp, filename, FA_CREATE_ALWAYS | FA_WRITE); res = f_open(&fp, filename, FA_CREATE_ALWAYS | FA_WRITE);
if (res) if (res)
{ {