diff options
author | William Wilgus <wilgus.william@gmail.com> | 2024-04-02 21:00:13 -0400 |
---|---|---|
committer | William Wilgus <wilgus.william@gmail.com> | 2024-04-02 21:04:44 -0400 |
commit | 8c994db2472f5e399cda4bfd37e1da235913aa78 (patch) | |
tree | 59386c413fa3f114933b331c85681774378979f8 /apps | |
parent | 4a91d376134c918c92348e56d7f5bcb092ba4117 (diff) | |
download | rockbox-8c994db2472f5e399cda4bfd37e1da235913aa78.tar.gz rockbox-8c994db2472f5e399cda4bfd37e1da235913aa78.zip |
multiboot_select plugin check volume root for valid firmware -- Try 2
I'm not sure why but on my fuze v2 I don't get the '.' nd '..'
directories back from readdir
that make removing '.' to find /.rockbox inconsistent
Instead filter out files and strcmp the incoming dirs
to BOOTDIR (.rockbox) and clear it when they match
Change-Id: Id8f3312cb3ae624dff1be21f745034c08c4ae1a7
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugins/multiboot_select.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/apps/plugins/multiboot_select.c b/apps/plugins/multiboot_select.c index 993a47c0e4..2922136548 100644 --- a/apps/plugins/multiboot_select.c +++ b/apps/plugins/multiboot_select.c | |||
@@ -155,11 +155,20 @@ static int find_roots(void) | |||
155 | 155 | ||
156 | struct dirent* ent; | 156 | struct dirent* ent; |
157 | while((ent = rb->readdir(dir))) { | 157 | while((ent = rb->readdir(dir))) { |
158 | /* skip non-directories */ | ||
159 | if ((rb->dir_get_info(dir, ent).attribute & ATTR_DIRECTORY) == 0) { | ||
160 | continue; | ||
161 | } | ||
162 | |||
158 | const char *dname = ent->d_name; | 163 | const char *dname = ent->d_name; |
159 | if (*dname == '.' && *(dname + 1) == '\0') | 164 | /* check for bootdir in the root of the volume */ |
160 | dname++; /* skip the dot so we can check root of volume */ | 165 | if (rb->strcmp(bootdir, dname) == 0) { |
166 | dname = ""; | ||
167 | } | ||
168 | |||
161 | int r = rb->snprintf(tmpbuf, sizeof(tmpbuf), "/<%d>/%s/%s/%s", | 169 | int r = rb->snprintf(tmpbuf, sizeof(tmpbuf), "/<%d>/%s/%s/%s", |
162 | vol, dname, bootdir, BOOTFILE); | 170 | vol, dname, bootdir, BOOTFILE); |
171 | |||
163 | if(r < 0 || (size_t)r >= sizeof(tmpbuf)) | 172 | if(r < 0 || (size_t)r >= sizeof(tmpbuf)) |
164 | continue; | 173 | continue; |
165 | 174 | ||