-
-
Notifications
You must be signed in to change notification settings - Fork 54
/
wifi_marauder_ep.c
44 lines (36 loc) · 1.53 KB
/
wifi_marauder_ep.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "wifi_marauder_ep.h"
// returns success (if true, then caller needs to free(the_html))
bool wifi_marauder_ep_read_html_file(WifiMarauderApp* app, uint8_t** the_html, size_t* html_size) {
// browse for files
FuriString* predefined_filepath = furi_string_alloc_set_str(MARAUDER_APP_FOLDER_HTML);
FuriString* selected_filepath = furi_string_alloc();
DialogsFileBrowserOptions browser_options;
dialog_file_browser_set_basic_options(&browser_options, ".html", &I_Text_10x10);
if(!dialog_file_browser_show(
app->dialogs, selected_filepath, predefined_filepath, &browser_options)) {
return false;
}
File* index_html = storage_file_alloc(app->storage);
if(!storage_file_open(
index_html, furi_string_get_cstr(selected_filepath), FSAM_READ, FSOM_OPEN_EXISTING)) {
dialog_message_show_storage_error(app->dialogs, "Cannot open file");
return false;
}
uint64_t size = storage_file_size(index_html);
*the_html = malloc(size); // to be freed by caller
uint8_t* buf_ptr = *the_html;
size_t read = 0;
while(read < size) {
size_t to_read = size - read;
if(to_read > UINT16_MAX) to_read = UINT16_MAX;
uint16_t now_read = storage_file_read(index_html, buf_ptr, (uint16_t)to_read);
read += now_read;
buf_ptr += now_read;
}
*html_size = read;
storage_file_close(index_html);
storage_file_free(index_html);
furi_string_free(selected_filepath);
furi_string_free(predefined_filepath);
return true;
}