Remove file expand, use seek for mass storage

This commit is contained in:
Willy-JL
2023-08-29 01:33:31 +02:00
parent 8bdbdaa6f5
commit 54804fcc66
10 changed files with 26 additions and 92 deletions

View File

@@ -125,19 +125,33 @@ bool mass_storage_scene_create_image_on_event(void* context, SceneManagerEvent e
app->file = storage_file_alloc(app->fs_api); app->file = storage_file_alloc(app->fs_api);
const char* error = NULL; const char* error = NULL;
if(storage_file_open( bool success = false;
app->file, furi_string_get_cstr(app->file_path), FSAM_WRITE, FSOM_CREATE_NEW)) {
uint8_t* buffer = malloc(WRITE_BUF_LEN);
do {
if(!storage_file_open(
app->file,
furi_string_get_cstr(app->file_path),
FSAM_WRITE,
FSOM_CREATE_NEW))
break;
uint64_t size = image_sizes[app->create_image_size].value; uint64_t size = image_sizes[app->create_image_size].value;
if(size == app->create_image_max) { if(size == app->create_image_max) size--;
size--; if(!storage_file_seek(file, size, true)) break;
}
if(!storage_file_expand(app->file, size)) { // Zero out first 4k - partition table and adjacent data
error = storage_file_get_error_desc(app->file); if(!storage_file_seek(file, 0, true)) break;
storage_file_close(app->file); if(!storage_file_write(file, buffer, WRITE_BUF_LEN)) break;
storage_common_remove(app->fs_api, furi_string_get_cstr(app->file_path));
} success = true;
} else { } while(false);
free(buffer);
if(!success) {
error = storage_file_get_error_desc(app->file); error = storage_file_get_error_desc(app->file);
storage_file_close(app->file);
storage_common_remove(app->fs_api, furi_string_get_cstr(app->file_path));
} }
storage_file_free(app->file); storage_file_free(app->file);
mass_storage_app_show_loading_popup(app, false); mass_storage_app_show_loading_popup(app, false);

View File

@@ -62,12 +62,6 @@ struct File {
* @param file pointer to file object * @param file pointer to file object
* @return current r/w pointer position * @return current r/w pointer position
* *
* @var FS_File_Api::expand
* @brief Expand the file (allocate space for it)
* @param file pointer to file object
* @param size how many bytes to allocate
* @return success flag
*
* @var FS_File_Api::truncate * @var FS_File_Api::truncate
* @brief Truncate file size to current r/w pointer position * @brief Truncate file size to current r/w pointer position
* @param file pointer to file object * @param file pointer to file object
@@ -100,7 +94,6 @@ typedef struct {
uint16_t (*write)(void* context, File* file, const void* buff, uint16_t bytes_to_write); uint16_t (*write)(void* context, File* file, const void* buff, uint16_t bytes_to_write);
bool (*const seek)(void* context, File* file, uint32_t offset, bool from_start); bool (*const seek)(void* context, File* file, uint32_t offset, bool from_start);
uint64_t (*tell)(void* context, File* file); uint64_t (*tell)(void* context, File* file);
bool (*const expand)(void* context, File* file, uint64_t size);
bool (*const truncate)(void* context, File* file); bool (*const truncate)(void* context, File* file);
uint64_t (*size)(void* context, File* file); uint64_t (*size)(void* context, File* file);
bool (*const sync)(void* context, File* file); bool (*const sync)(void* context, File* file);

View File

@@ -117,13 +117,6 @@ bool storage_file_seek(File* file, uint32_t offset, bool from_start);
*/ */
uint64_t storage_file_tell(File* file); uint64_t storage_file_tell(File* file);
/** Expand the file (allocate space for it)
* @param file pointer to file object.
* @param size how many bytes to allocate
* @return success flag
*/
bool storage_file_expand(File* file, uint64_t size);
/** Truncates the file size to the current position of the r/w pointer /** Truncates the file size to the current position of the r/w pointer
* @param file pointer to file object. * @param file pointer to file object.
* @return bool success flag * @return bool success flag

View File

@@ -203,21 +203,6 @@ uint64_t storage_file_tell(File* file) {
return S_RETURN_UINT64; return S_RETURN_UINT64;
} }
bool storage_file_expand(File* file, uint64_t size) {
S_FILE_API_PROLOGUE;
S_API_PROLOGUE;
SAData data = {
.fexpand = {
.file = file,
.size = size,
}};
S_API_MESSAGE(StorageCommandFileExpand);
S_API_EPILOGUE;
return S_RETURN_BOOL;
}
bool storage_file_truncate(File* file) { bool storage_file_truncate(File* file) {
S_FILE_API_PROLOGUE; S_FILE_API_PROLOGUE;
S_API_PROLOGUE; S_API_PROLOGUE;

View File

@@ -32,11 +32,6 @@ typedef struct {
bool from_start; bool from_start;
} SADataFSeek; } SADataFSeek;
typedef struct {
File* file;
uint64_t size;
} SADataFExpand;
typedef struct { typedef struct {
File* file; File* file;
const char* path; const char* path;
@@ -102,7 +97,6 @@ typedef union {
SADataFRead fread; SADataFRead fread;
SADataFWrite fwrite; SADataFWrite fwrite;
SADataFSeek fseek; SADataFSeek fseek;
SADataFExpand fexpand;
SADataDOpen dopen; SADataDOpen dopen;
SADataDRead dread; SADataDRead dread;
@@ -136,7 +130,6 @@ typedef enum {
StorageCommandFileWrite, StorageCommandFileWrite,
StorageCommandFileSeek, StorageCommandFileSeek,
StorageCommandFileTell, StorageCommandFileTell,
StorageCommandFileExpand,
StorageCommandFileTruncate, StorageCommandFileTruncate,
StorageCommandFileSize, StorageCommandFileSize,
StorageCommandFileSync, StorageCommandFileSync,

View File

@@ -206,19 +206,6 @@ static uint64_t storage_process_file_tell(Storage* app, File* file) {
return ret; return ret;
} }
static bool storage_process_file_expand(Storage* app, File* file, const uint64_t size) {
bool ret = false;
StorageData* storage = get_storage_by_file(file, app->storage);
if(storage == NULL) {
file->error_id = FSE_INVALID_PARAMETER;
} else {
FS_CALL(storage, file.expand(storage, file, size));
}
return ret;
}
static bool storage_process_file_truncate(Storage* app, File* file) { static bool storage_process_file_truncate(Storage* app, File* file) {
bool ret = false; bool ret = false;
StorageData* storage = get_storage_by_file(file, app->storage); StorageData* storage = get_storage_by_file(file, app->storage);
@@ -588,10 +575,6 @@ void storage_process_message_internal(Storage* app, StorageMessage* message) {
message->return_data->uint64_value = message->return_data->uint64_value =
storage_process_file_tell(app, message->data->file.file); storage_process_file_tell(app, message->data->file.file);
break; break;
case StorageCommandFileExpand:
message->return_data->bool_value = storage_process_file_expand(
app, message->data->fexpand.file, message->data->fexpand.size);
break;
case StorageCommandFileTruncate: case StorageCommandFileTruncate:
message->return_data->bool_value = message->return_data->bool_value =
storage_process_file_truncate(app, message->data->file.file); storage_process_file_truncate(app, message->data->file.file);

View File

@@ -396,22 +396,6 @@ static uint64_t storage_ext_file_tell(void* ctx, File* file) {
return position; return position;
} }
static bool storage_ext_file_expand(void* ctx, File* file, const uint64_t size) {
#ifdef FURI_RAM_EXEC
UNUSED(ctx);
UNUSED(file);
UNUSED(size);
file->error_id = FSE_NOT_READY;
#else
StorageData* storage = ctx;
SDFile* file_data = storage_get_storage_file_data(file, storage);
file->internal_error_id = f_expand(file_data, size, 1);
file->error_id = storage_ext_parse_error(file->internal_error_id);
#endif
return (file->error_id == FSE_OK);
}
static bool storage_ext_file_truncate(void* ctx, File* file) { static bool storage_ext_file_truncate(void* ctx, File* file) {
#ifdef FURI_RAM_EXEC #ifdef FURI_RAM_EXEC
UNUSED(ctx); UNUSED(ctx);
@@ -625,7 +609,6 @@ static const FS_Api fs_api = {
.write = storage_ext_file_write, .write = storage_ext_file_write,
.seek = storage_ext_file_seek, .seek = storage_ext_file_seek,
.tell = storage_ext_file_tell, .tell = storage_ext_file_tell,
.expand = storage_ext_file_expand,
.truncate = storage_ext_file_truncate, .truncate = storage_ext_file_truncate,
.size = storage_ext_file_size, .size = storage_ext_file_size,
.sync = storage_ext_file_sync, .sync = storage_ext_file_sync,

View File

@@ -455,14 +455,6 @@ static uint64_t storage_int_file_tell(void* ctx, File* file) {
return position; return position;
} }
static bool storage_int_file_expand(void* ctx, File* file, const uint64_t size) {
UNUSED(ctx);
UNUSED(file);
UNUSED(size);
file->error_id = FSE_NOT_IMPLEMENTED;
return (file->error_id == FSE_OK);
}
static bool storage_int_file_truncate(void* ctx, File* file) { static bool storage_int_file_truncate(void* ctx, File* file) {
StorageData* storage = ctx; StorageData* storage = ctx;
lfs_t* lfs = lfs_get_from_storage(storage); lfs_t* lfs = lfs_get_from_storage(storage);
@@ -711,7 +703,6 @@ static const FS_Api fs_api = {
.write = storage_int_file_write, .write = storage_int_file_write,
.seek = storage_int_file_seek, .seek = storage_int_file_seek,
.tell = storage_int_file_tell, .tell = storage_int_file_tell,
.expand = storage_int_file_expand,
.truncate = storage_int_file_truncate, .truncate = storage_int_file_truncate,
.size = storage_int_file_size, .size = storage_int_file_size,
.sync = storage_int_file_sync, .sync = storage_int_file_sync,

View File

@@ -2695,7 +2695,6 @@ Function,+,storage_file_close,_Bool,File*
Function,+,storage_file_copy_to_file,_Bool,"File*, File*, uint32_t" Function,+,storage_file_copy_to_file,_Bool,"File*, File*, uint32_t"
Function,+,storage_file_eof,_Bool,File* Function,+,storage_file_eof,_Bool,File*
Function,+,storage_file_exists,_Bool,"Storage*, const char*" Function,+,storage_file_exists,_Bool,"Storage*, const char*"
Function,+,storage_file_expand,_Bool,"File*, uint64_t"
Function,+,storage_file_free,void,File* Function,+,storage_file_free,void,File*
Function,+,storage_file_get_error,FS_Error,File* Function,+,storage_file_get_error,FS_Error,File*
Function,+,storage_file_get_error_desc,const char*,File* Function,+,storage_file_get_error_desc,const char*,File*
1 entry status name type params
2695 Function + storage_file_copy_to_file _Bool File*, File*, uint32_t
2696 Function + storage_file_eof _Bool File*
2697 Function + storage_file_exists _Bool Storage*, const char*
Function + storage_file_expand _Bool File*, uint64_t
2698 Function + storage_file_free void File*
2699 Function + storage_file_get_error FS_Error File*
2700 Function + storage_file_get_error_desc const char* File*

View File

@@ -68,7 +68,7 @@
#define _USE_FASTSEEK 1 #define _USE_FASTSEEK 1
/* This option switches fast seek feature. (0:Disable or 1:Enable) */ /* This option switches fast seek feature. (0:Disable or 1:Enable) */
#define _USE_EXPAND 1 #define _USE_EXPAND 0
/* This option switches f_expand function. (0:Disable or 1:Enable) */ /* This option switches f_expand function. (0:Disable or 1:Enable) */
#define _USE_CHMOD 0 #define _USE_CHMOD 0