From 8c994db2472f5e399cda4bfd37e1da235913aa78 Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Tue, 2 Apr 2024 21:00:13 -0400 Subject: 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 --- apps/plugins/multiboot_select.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'apps') 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) struct dirent* ent; while((ent = rb->readdir(dir))) { + /* skip non-directories */ + if ((rb->dir_get_info(dir, ent).attribute & ATTR_DIRECTORY) == 0) { + continue; + } + const char *dname = ent->d_name; - if (*dname == '.' && *(dname + 1) == '\0') - dname++; /* skip the dot so we can check root of volume */ + /* check for bootdir in the root of the volume */ + if (rb->strcmp(bootdir, dname) == 0) { + dname = ""; + } + int r = rb->snprintf(tmpbuf, sizeof(tmpbuf), "/<%d>/%s/%s/%s", vol, dname, bootdir, BOOTFILE); + if(r < 0 || (size_t)r >= sizeof(tmpbuf)) continue; -- cgit v1.2.3