+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.
#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");
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);
return 0;
}
-static grub_command_t cmd;
+static grub_extcmd_t cmd;
\f
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);
}
@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