source: grub-pc/trunk/fuentes/grub-core/commands/echo.c @ 22

Last change on this file since 22 was 22, checked in by mabarracus, 4 years ago

updated version and apply net.ifnames=0 into debian/rules

File size: 2.9 KB
Line 
1/* echo.c - Command to display a line of text  */
2/*
3 *  GRUB  --  GRand Unified Bootloader
4 *  Copyright (C) 2006,2007,2010  Free Software Foundation, Inc.
5 *
6 *  GRUB is free software: you can redistribute it and/or modify
7 *  it under the terms of the GNU General Public License as published by
8 *  the Free Software Foundation, either version 3 of the License, or
9 *  (at your option) any later version.
10 *
11 *  GRUB is distributed in the hope that it will be useful,
12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 *  GNU General Public License for more details.
15 *
16 *  You should have received a copy of the GNU General Public License
17 *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include <grub/dl.h>
21#include <grub/misc.h>
22#include <grub/extcmd.h>
23#include <grub/i18n.h>
24#include <grub/term.h>
25
26GRUB_MOD_LICENSE ("GPLv3+");
27
28static const struct grub_arg_option options[] =
29  {
30    {0, 'n', 0, N_("Do not output the trailing newline."), 0, 0},
31    {0, 'e', 0, N_("Enable interpretation of backslash escapes."), 0, 0},
32    {0, 0, 0, 0, 0, 0}
33  };
34
35static grub_err_t
36grub_cmd_echo (grub_extcmd_context_t ctxt, int argc, char **args)
37{
38  struct grub_arg_list *state = ctxt->state;
39  int newline = 1;
40  int i;
41
42  /* Check if `-n' was used.  */
43  if (state[0].set)
44    newline = 0;
45
46  for (i = 0; i < argc; i++)
47    {
48      char *arg = *args;
49      /* Unescaping results in a string no longer than the original.  */
50      char *unescaped = grub_malloc (grub_strlen (arg) + 1);
51      char *p = unescaped;
52      args++;
53
54      if (!unescaped)
55        return grub_errno;
56
57      while (*arg)
58        {
59          /* In case `-e' is used, parse backslashes.  */
60          if (*arg == '\\' && state[1].set)
61            {
62              arg++;
63              if (*arg == '\0')
64                break;
65
66              switch (*arg)
67                {
68                case '\\':
69                  *p++ = '\\';
70                  break;
71
72                case 'a':
73                  *p++ = '\a';
74                  break;
75
76                case 'c':
77                  newline = 0;
78                  break;
79
80                case 'f':
81                  *p++ = '\f';
82                  break;
83
84                case 'n':
85                  *p++ = '\n';
86                  break;
87
88                case 'r':
89                  *p++ = '\r';
90                  break;
91
92                case 't':
93                  *p++ = '\t';
94                  break;
95
96                case 'v':
97                  *p++ = '\v';
98                  break;
99                }
100              arg++;
101              continue;
102            }
103
104          /* This was not an escaped character, or escaping is not
105             enabled.  */
106          *p++ = *arg;
107          arg++;
108        }
109
110      *p = '\0';
111      grub_xputs (unescaped);
112      grub_free (unescaped);
113
114      /* If another argument follows, insert a space.  */
115      if (i != argc - 1)
116        grub_printf (" " );
117    }
118
119  if (newline)
120    grub_printf ("\n");
121
122  grub_refresh (); 
123
124  return 0;
125}
126
127static grub_extcmd_t cmd;
128
129GRUB_MOD_INIT(echo)
130{
131  cmd = grub_register_extcmd ("echo", grub_cmd_echo,
132                              GRUB_COMMAND_ACCEPT_DASH
133                              | GRUB_COMMAND_OPTIONS_AT_START,
134                              N_("[-e|-n] STRING"), N_("Display a line of text."),
135                              options);
136}
137
138GRUB_MOD_FINI(echo)
139{
140  grub_unregister_extcmd (cmd);
141}
Note: See TracBrowser for help on using the repository browser.