]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* commands/cat.c (options): New variable.
authorColin Watson <cjwatson@ubuntu.com>
Mon, 28 Jun 2010 07:51:46 +0000 (08:51 +0100)
committerColin Watson <cjwatson@ubuntu.com>
Mon, 28 Jun 2010 07:51:46 +0000 (08:51 +0100)
(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.

ChangeLog
commands/cat.c
docs/grub.texi

index e14460b2fbc366e6b7abec8f5a355667470062bd..7f0cc8ba59013a8ce234975313fdd7c5c957571e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
index 3bdafc4c6a2474ff3a84a4ac3060d14f756fd7e2..4c0e19bc2d6bfbf08605e0d1c6fef99fec37cb1e 100644 (file)
 #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;
 \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);
 }
index 98d3c5f00acb8132b6c9300f50da0ddead2d2001..c1981633ff9e77f06a4bf90efddb3673d502949b 100644 (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