add .. to dir listing if it is missing
authorkub <derkub@gmail.com>
Wed, 14 Feb 2024 22:00:45 +0000 (23:00 +0100)
committerkub <derkub@gmail.com>
Wed, 14 Feb 2024 22:00:45 +0000 (23:00 +0100)
menu.c

diff --git a/menu.c b/menu.c
index 04fb381..5eb48b9 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -475,7 +475,7 @@ static int me_id2offset(const menu_entry *ent, menu_id id)
 static void me_enable(menu_entry *entries, menu_id id, int enable)\r
 {\r
        int i = me_id2offset(entries, id);\r
-       entries[i].enabled = enable;\r
+       entries[i].enabled = !!enable;\r
 }\r
 \r
 static int me_count(const menu_entry *ent)\r
@@ -1076,6 +1076,16 @@ rescan:
        if (n > 1)\r
                qsort(namelist, n, sizeof(namelist[0]), scandir_cmp);\r
 \r
+       // add ".." if it's somehow not there\r
+       if (n == 0 || strcmp(namelist[0]->d_name, "..")) {\r
+               struct dirent *dotdot = malloc(sizeof(*dotdot));\r
+               *dotdot = (struct dirent) { .d_name="..", .d_type=DT_DIR };\r
+               namelist = realloc(namelist, (n+1)*sizeof(*namelist));\r
+               memmove(namelist+1, namelist, n*sizeof(*namelist));\r
+               namelist[0] = dotdot;\r
+               n++;\r
+       }\r
+\r
        // try to find selected file\r
        sel = 0;\r
        if (sel_fname[0] != 0) {\r