[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Make echo UTF-8-clean
From: |
Colin Watson |
Subject: |
[PATCH] Make echo UTF-8-clean |
Date: |
Tue, 21 Dec 2010 13:06:39 +0000 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
While working on my previous patch, I noticed that echo wasn't
UTF-8-clean: the UTF-8 character 'à' was coming out as "??". This patch
fixes that.
2010-12-21 Colin Watson <address@hidden>
* grub-core/commands/echo.c (grub_cmd_echo): Make UTF-8-clean by
constructing a new unescaped string and passing it to grub_xputs in
one go, rather than passing characters to grub_printf one at a time.
=== modified file 'grub-core/commands/echo.c'
--- grub-core/commands/echo.c 2010-11-30 15:23:41 +0000
+++ grub-core/commands/echo.c 2010-12-21 13:03:09 +0000
@@ -44,6 +44,9 @@ grub_cmd_echo (grub_extcmd_context_t ctx
for (i = 0; i < argc; i++)
{
char *arg = *args;
+ /* Unescaping results in a string no longer than the original. */
+ char *unescaped = grub_malloc (grub_strlen (arg) + 1);
+ char *p = unescaped;
args++;
while (*arg)
@@ -58,11 +61,11 @@ grub_cmd_echo (grub_extcmd_context_t ctx
switch (*arg)
{
case '\\':
- grub_printf ("\\");
+ *p++ = '\\';
break;
case 'a':
- grub_printf ("\a");
+ *p++ = '\a';
break;
case 'c':
@@ -70,23 +73,23 @@ grub_cmd_echo (grub_extcmd_context_t ctx
break;
case 'f':
- grub_printf ("\f");
+ *p++ = '\f';
break;
case 'n':
- grub_printf ("\n");
+ *p++ = '\n';
break;
case 'r':
- grub_printf ("\r");
+ *p++ = '\r';
break;
case 't':
- grub_printf ("\t");
+ *p++ = '\t';
break;
case 'v':
- grub_printf ("\v");
+ *p++ = '\v';
break;
}
arg++;
@@ -95,10 +98,14 @@ grub_cmd_echo (grub_extcmd_context_t ctx
/* This was not an escaped character, or escaping is not
enabled. */
- grub_printf ("%c", *arg);
+ *p++ = *arg;
arg++;
}
+ *p = '\0';
+ grub_xputs (unescaped);
+ grub_free (unescaped);
+
/* If another argument follows, insert a space. */
if (i != argc - 1)
grub_printf (" " );
--
Colin Watson address@hidden
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] Make echo UTF-8-clean,
Colin Watson <=