* commands/cat.c (options): New variable.

(grub_cmd_cat): Parse options.  If the --dos option is given, print
DOS-style "\r\n" line endings as simple newlines (Debian bug
#586358).
(GRUB_MOD_INIT): Use extcmd.
(GRUB_MOD_FINI): Likewise.
* docs/grub.texi (cat): Document --dos.
This commit is contained in:
Colin Watson 2010-06-28 08:51:46 +01:00
parent 412e09f355
commit bbe346529e
3 changed files with 40 additions and 9 deletions

View file

@ -1,3 +1,13 @@
2010-06-28 Colin Watson <cjwatson@ubuntu.com>
* commands/cat.c (options): New variable.
(grub_cmd_cat): Parse options. If the --dos option is given, print
DOS-style "\r\n" line endings as simple newlines (Debian bug
#586358).
(GRUB_MOD_INIT): Use extcmd.
(GRUB_MOD_FINI): Likewise.
* docs/grub.texi (cat): Document --dos.
2010-06-28 Vladimir Serbinenko <phcoder@gmail.com>
XEN with Linux grub-mkconfig support.

View file

@ -23,19 +23,28 @@
#include <grub/term.h>
#include <grub/misc.h>
#include <grub/gzio.h>
#include <grub/command.h>
#include <grub/extcmd.h>
#include <grub/i18n.h>
static grub_err_t
grub_cmd_cat (grub_command_t cmd __attribute__ ((unused)),
int argc, char **args)
static const struct grub_arg_option options[] =
{
{"dos", -1, 0, N_("Accept DOS-style CR/NL line endings."), 0, 0},
{0, 0, 0, 0, 0, 0}
};
static grub_err_t
grub_cmd_cat (grub_extcmd_t cmd, int argc, char **args)
{
struct grub_arg_list *state = cmd->state;
int dos = 0;
grub_file_t file;
char buf[GRUB_DISK_SECTOR_SIZE];
grub_ssize_t size;
int key = 0;
if (state[0].set)
dos = 1;
if (argc != 1)
return grub_error (GRUB_ERR_BAD_ARGUMENT, "file name required");
@ -54,6 +63,11 @@ grub_cmd_cat (grub_command_t cmd __attribute__ ((unused)),
if ((grub_isprint (c) || grub_isspace (c)) && c != '\r')
grub_putchar (c);
else if (dos && c == '\r' && buf[i + 1] == '\n')
{
grub_putchar ('\n');
i++;
}
else
{
grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT);
@ -74,15 +88,16 @@ grub_cmd_cat (grub_command_t cmd __attribute__ ((unused)),
return 0;
}
static grub_command_t cmd;
static grub_extcmd_t cmd;
GRUB_MOD_INIT(cat)
{
cmd = grub_register_command_p1 ("cat", grub_cmd_cat,
N_("FILE"), N_("Show the contents of a file."));
cmd = grub_register_extcmd ("cat", grub_cmd_cat, GRUB_COMMAND_FLAG_BOTH,
N_("FILE"), N_("Show the contents of a file."),
options);
}
GRUB_MOD_FINI(cat)
{
grub_unregister_command (cmd);
grub_unregister_extcmd (cmd);
}

View file

@ -1624,13 +1624,19 @@ a menu entry).
@node cat
@subsection cat
@deffn Command cat file
@deffn Command cat [@option{--dos}] file
Display the contents of the file @var{file}. This command may be useful
to remind you of your OS's root partition:
@example
grub> @kbd{cat /etc/fstab}
@end example
If the @option{--dos} option is used, then carriage return / new line pairs
will be displayed as a simple new line. Otherwise, the carriage return will
be displayed as a control character (@samp{<d>}) to make it easier to see
when boot problems are caused by a file formatted using DOS-style line
endings.
@end deffn