Considering Daniel's feedback on the v2 of this patch series, I've broken up patches #1 and #2 and dropped patch #3 from the original series. These changes make the output of the ls command a little more like the GNU ls output.
Glenn Washburn v6: * Rebase onto current master * Change ctx->filename to ctx->filename != NULL in tertiary conditional in patch 5 and add a comment explaining why ctx->filename is needed v4: Add missing parenthesis Glenn Washburn (6): commands/ls: Return proper GRUB_ERR_* for functions returning type grub_err_t commands/ls: Merge print_files_long and print_files into print_file commands/ls: Show modification time for file paths commands/ls: Output path for single file arguments given with path commands/ls: Print full paths for file args commands/ls: Add directory header for dir args grub-core/commands/ls.c | 103 +++++++++++++++++++++------------------- 1 file changed, 54 insertions(+), 49 deletions(-) Range-diff against v4: 1: 9086cccd8a0f = 1: f8081dbd262d commands/ls: Return proper GRUB_ERR_* for functions returning type grub_err_t 2: 3192dc2471d0 = 2: 310a52b42d6d commands/ls: Merge print_files_long and print_files into print_file 3: 889e1e05a355 ! 3: 01532280401b commands/ls: Show modification time for file paths @@ grub-core/commands/ls.c: grub_ls_list_files (char *dirname, int longlist, int al - grub_file_close (file); - -- p = grub_strrchr (dirname, '/') + 1; -- ctx.dirname = grub_strndup (dirname, p - dirname); +- p = grub_strrchr (dirname, '/'); +- if (p == NULL) + /* PATH might be a regular file. */ -+ ctx.filename = grub_strrchr (dirname, '/') + 1; ++ ctx.filename = grub_strrchr (dirname, '/'); ++ if (ctx.filename == NULL) + goto fail; +- ++p; ++ ++(ctx.filename); + +- ctx.dirname = grub_strndup (dirname, p - dirname); + ctx.dirname = grub_strndup (dirname, ctx.filename - dirname); if (ctx.dirname == NULL) goto fail; 4: d63e007f635b = 4: fd4378a9302a commands/ls: Output path for single file arguments given with path 5: 39adcb21e320 ! 5: 16c2203f04dc commands/ls: Print full paths for file args @@ grub-core/commands/ls.c: print_file (const char *filename, const struct grub_dir datetime.minute, datetime.second); } - grub_printf ("%s%s\n", filename, info->dir ? "/" : ""); -+ grub_printf ("%s%s\n", (ctx->filename) ? pathname : filename, ++ /* ++ * Only print the full path when listing a file path given as an argument ++ * to ls (ie. when ctx->filename != NULL). File listings that are printed ++ * due to showing the contents of a directory do not need a full path because ++ * the full path to the directory will have already been printed. ++ */ ++ grub_printf ("%s%s\n", (ctx->filename != NULL) ? pathname : filename, + info->dir ? "/" : ""); + + grub_free (pathname); 6: 0ebbfd3b0e15 ! 6: ec9120ac52b0 commands/ls: Add directory header for dir args @@ grub-core/commands/ls.c: grub_ls_list_files (char *dirname, int longlist, int al /* PATH might be a regular file. */ + ctx.print_dirhdr = 0; - ctx.filename = grub_strrchr (dirname, '/') + 1; - ctx.dirname = grub_strndup (dirname, ctx.filename - dirname); - if (ctx.dirname == NULL) + ctx.filename = grub_strrchr (dirname, '/'); + if (ctx.filename == NULL) + goto fail; @@ grub-core/commands/ls.c: grub_cmd_ls (grub_extcmd_context_t ctxt, int argc, char **args) grub_ls_list_devices (state[0].set); else -- 2.34.1 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel