Skip to content

Commit 34508a4

Browse files
authored
Merge pull request #31 from abduct/patch-1
Fixes bad usb subdirectory file errors
2 parents 57aee8f + 13fc253 commit 34508a4

File tree

3 files changed

+35
-6
lines changed

3 files changed

+35
-6
lines changed

applications/bad_usb/bad_usb_app.c

+14-6
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,21 @@ static bool bad_usb_check_assets() {
4242

4343
BadUsbApp* bad_usb_app_alloc(char* arg) {
4444
BadUsbApp* app = malloc(sizeof(BadUsbApp));
45-
45+
4646
if(arg != NULL) {
47-
string_t filename;
48-
string_init(filename);
49-
path_extract_filename_no_ext(arg, filename);
50-
strncpy(app->file_name, string_get_cstr(filename), BAD_USB_FILE_NAME_LEN);
51-
string_clear(filename);
47+
string_t filename;
48+
string_init(filename);
49+
50+
string_t subdirnames;
51+
string_init(subdirnames);
52+
53+
path_extract_subdirnames(arg, subdirnames);
54+
path_extract_filename_no_ext(arg, filename);
55+
56+
snprintf(app->file_name, BAD_USB_FILE_NAME_LEN, "%s/%s", string_get_cstr(subdirnames), string_get_cstr(filename));
57+
58+
string_clear(filename);
59+
string_clear(subdirnames);
5260
}
5361

5462
app->gui = furi_record_open("gui");

lib/toolbox/path.c

+13
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,19 @@ void path_extract_dirname(const char* path, string_t dirname) {
4444
}
4545
}
4646

47+
void path_extract_subdirnames(const char* path, string_t subdirnames) {
48+
string_set(subdirnames, path);
49+
path_cleanup(subdirnames);
50+
51+
for(int i = 0; i<3; i++) {
52+
size_t pos_start = string_search_char(subdirnames, '/');
53+
string_mid(subdirnames, pos_start + 1, string_size(subdirnames));
54+
}
55+
56+
size_t pos_end = string_search_rchar(subdirnames, '/');
57+
string_mid(subdirnames, 0, pos_end);
58+
}
59+
4760
void path_append(string_t path, const char* suffix) {
4861
path_cleanup(path);
4962
string_t suffix_str;

lib/toolbox/path.h

+8
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ void path_extract_basename(const char* path, string_t basename);
3030
*/
3131
void path_extract_dirname(const char* path, string_t dirname);
3232

33+
/**
34+
* @brief Extract all sub directory names after initial root directory
35+
*
36+
* @param path path string
37+
* @param subdirname output string. Must be initialized before.
38+
*/
39+
void path_extract_subdirnames(const char* path, string_t subdirnames);
40+
3341
/**
3442
* @brief Appends new component to path, adding path delimiter
3543
*

0 commit comments

Comments
 (0)