From 02c62beae962d35eac855057a22cf2e280ea176c Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Thu, 22 Feb 2024 01:22:04 +0000 Subject: [PATCH] Better virtual mount error handling --nobuild --- .../js_app/modules/js_usbdisk/js_usbdisk.c | 14 +++++++++----- .../scenes/mass_storage_scene_create_image.c | 16 ++++++++++------ 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/applications/system/js_app/modules/js_usbdisk/js_usbdisk.c b/applications/system/js_app/modules/js_usbdisk/js_usbdisk.c index 64dfc61b4..06dfb3159 100644 --- a/applications/system/js_app/modules/js_usbdisk/js_usbdisk.c +++ b/applications/system/js_app/modules/js_usbdisk/js_usbdisk.c @@ -109,7 +109,7 @@ static void js_usbdisk_create_image(struct mjs* mjs) { Storage* storage = furi_record_open(RECORD_STORAGE); File* file = storage_file_alloc(storage); do { - if(!storage_file_open(file, path, FSAM_WRITE, FSOM_CREATE_NEW)) { + if(!storage_file_open(file, path, FSAM_READ | FSAM_WRITE, FSOM_CREATE_NEW)) { error = storage_file_get_error_desc(file); break; } @@ -120,10 +120,14 @@ static void js_usbdisk_create_image(struct mjs* mjs) { } error = "Image formatting failed"; - if(storage_virtual_init(storage, file) != FSE_OK) break; - if(storage_virtual_format(storage) != FSE_OK) break; - if(storage_virtual_quit(storage) != FSE_OK) break; - error = NULL; + if(storage_virtual_init(storage, file) != FSE_OK) { + if(storage_virtual_quit(storage) != FSE_OK) break; + if(storage_virtual_init(storage, file) != FSE_OK) break; + } + if(storage_virtual_format(storage) == FSE_OK) { + error = NULL; + } + storage_virtual_quit(storage); } while(0); storage_file_free(file); furi_record_close(RECORD_STORAGE); diff --git a/applications/system/mass_storage/scenes/mass_storage_scene_create_image.c b/applications/system/mass_storage/scenes/mass_storage_scene_create_image.c index 18f365e61..4a732374b 100644 --- a/applications/system/mass_storage/scenes/mass_storage_scene_create_image.c +++ b/applications/system/mass_storage/scenes/mass_storage_scene_create_image.c @@ -131,7 +131,7 @@ bool mass_storage_scene_create_image_on_event(void* context, SceneManagerEvent e if(!storage_file_open( app->file, furi_string_get_cstr(app->file_path), - FSAM_WRITE, + FSAM_READ | FSAM_WRITE, FSOM_CREATE_NEW)) break; @@ -140,11 +140,15 @@ bool mass_storage_scene_create_image_on_event(void* context, SceneManagerEvent e if(!storage_file_expand(app->file, size)) break; // Format as exFAT - if(storage_virtual_init(app->fs_api, app->file) != FSE_OK) break; - if(storage_virtual_format(app->fs_api) != FSE_OK) break; - if(storage_virtual_quit(app->fs_api) != FSE_OK) break; - - success = true; + error = "Image formatting failed"; + if(storage_virtual_init(app->fs_api, app->file) != FSE_OK) { + if(storage_virtual_quit(app->fs_api) != FSE_OK) break; + if(storage_virtual_init(app->fs_api, app->file) != FSE_OK) break; + } + if(storage_virtual_format(app->fs_api) == FSE_OK) { + success = true; + } + storage_virtual_quit(app->fs_api); } while(false); if(!success) {