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
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel