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
v5:
* Rebase onto current master
* Change ctx->filename to pathname != NULL in tertiary conditional in patch 5
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 | 97 ++++++++++++++++++++---------------------
1 file changed, 48 insertions(+), 49 deletions(-)
Range-diff against v4:
1: 9086cccd8a0f = 1: b89e1b373694 commands/ls: Return proper GRUB_ERR_* for
functions returning type grub_err_t
2: 3192dc2471d0 = 2: 6cb474ddb291 commands/ls: Merge print_files_long and
print_files into print_file
3: 889e1e05a355 ! 3: fe84e5952a0c 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: 0a6e6c6d5c1e commands/ls: Output path for single file
arguments given with path
5: 39adcb21e320 ! 5: 3637f8bd2c1f 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,
++ grub_printf ("%s%s\n", (pathname != NULL) ? pathname : filename,
+ info->dir ? "/" : "");
+
+ grub_free (pathname);
6: 0ebbfd3b0e15 ! 6: 44bbd467b424 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
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel