|
|
@@ -6,19 +6,21 @@
|
|
|
#include <mp_flipper_runtime.h>
|
|
|
#include <mp_flipper_file_reader.h>
|
|
|
|
|
|
+#include "mp_flipper_context.h"
|
|
|
#include "mp_flipper_file_helper.h"
|
|
|
|
|
|
typedef struct {
|
|
|
size_t pointer;
|
|
|
FuriString* content;
|
|
|
size_t size;
|
|
|
-} FileReaderContext;
|
|
|
+} FileDescriptor;
|
|
|
|
|
|
inline void* mp_flipper_file_reader_context_alloc(const char* filename) {
|
|
|
+ mp_flipper_context_t* ctx = mp_flipper_context;
|
|
|
+
|
|
|
FuriString* path = furi_string_alloc_printf("%s", filename);
|
|
|
- Storage* storage = furi_record_open(RECORD_STORAGE);
|
|
|
- File* file = storage_file_alloc(storage);
|
|
|
- FileReaderContext* ctx = NULL;
|
|
|
+ File* file = storage_file_alloc(ctx->storage);
|
|
|
+ FileDescriptor* fd = NULL;
|
|
|
|
|
|
do {
|
|
|
if(mp_flipper_try_resolve_filesystem_path(path) == MP_FLIPPER_IMPORT_STAT_NO_EXIST) {
|
|
|
@@ -33,42 +35,41 @@ inline void* mp_flipper_file_reader_context_alloc(const char* filename) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- ctx = malloc(sizeof(FileReaderContext));
|
|
|
+ fd = malloc(sizeof(FileDescriptor));
|
|
|
|
|
|
- ctx->pointer = 0;
|
|
|
- ctx->content = furi_string_alloc();
|
|
|
- ctx->size = storage_file_size(file);
|
|
|
+ fd->pointer = 0;
|
|
|
+ fd->content = furi_string_alloc();
|
|
|
+ fd->size = storage_file_size(file);
|
|
|
|
|
|
char character = '\0';
|
|
|
|
|
|
- for(size_t i = 0; i < ctx->size; i++) {
|
|
|
+ for(size_t i = 0; i < fd->size; i++) {
|
|
|
storage_file_read(file, &character, 1);
|
|
|
|
|
|
- furi_string_push_back(ctx->content, character);
|
|
|
+ furi_string_push_back(fd->content, character);
|
|
|
}
|
|
|
} while(false);
|
|
|
|
|
|
storage_file_free(file);
|
|
|
- furi_record_close(RECORD_STORAGE);
|
|
|
furi_string_free(path);
|
|
|
|
|
|
- return ctx;
|
|
|
+ return fd;
|
|
|
}
|
|
|
|
|
|
inline uint32_t mp_flipper_file_reader_read(void* data) {
|
|
|
- FileReaderContext* ctx = data;
|
|
|
+ FileDescriptor* fd = data;
|
|
|
|
|
|
- if(ctx->pointer >= ctx->size) {
|
|
|
+ if(fd->pointer >= fd->size) {
|
|
|
return MP_FLIPPER_FILE_READER_EOF;
|
|
|
}
|
|
|
|
|
|
- return furi_string_get_char(ctx->content, ctx->pointer++);
|
|
|
+ return furi_string_get_char(fd->content, fd->pointer++);
|
|
|
}
|
|
|
|
|
|
void mp_flipper_file_reader_close(void* data) {
|
|
|
- FileReaderContext* ctx = data;
|
|
|
+ FileDescriptor* fd = data;
|
|
|
|
|
|
- furi_string_free(ctx->content);
|
|
|
+ furi_string_free(fd->content);
|
|
|
|
|
|
free(data);
|
|
|
}
|