[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: escape chars + gettext hangs
From: |
Bruno Haible |
Subject: |
Re: escape chars + gettext hangs |
Date: |
Sun, 11 Jul 2004 19:39:48 +0200 |
User-agent: |
KMail/1.5 |
Arkadiusz MiĆkiewicz wrote:
> /usr/bin/gettext -e '\"' hangs for me (0.14.1).
Thanks for the report. The appended patch fixes it and will be contained
in the next release.
Bruno
*** gettext-5/gettext-runtime/src/gettext.c Sat Jul 10 20:23:28 2004
--- gettext-6/gettext-runtime/src/gettext.c Sun Jul 11 02:31:01 2004
***************
*** 287,302 ****
char *retval, *rp;
const char *cp = str;
! do
{
while (cp[0] != '\0' && cp[0] != '\\')
++cp;
}
- while (cp[0] != '\0' && cp[1] != '\0'
- && strchr ("bcfnrt\\01234567", cp[1]) == NULL);
-
- if (cp[0] == '\0')
- return str;
retval = (char *) xmalloc (strlen (str));
--- 287,305 ----
char *retval, *rp;
const char *cp = str;
! for (;;)
{
while (cp[0] != '\0' && cp[0] != '\\')
++cp;
+ if (cp[0] == '\0')
+ return str;
+ /* Found a backslash. */
+ if (cp[1] == '\0')
+ return str;
+ if (strchr ("bcfnrt\\01234567", cp[1]) != NULL)
+ break;
+ ++cp;
}
retval = (char *) xmalloc (strlen (str));
***************
*** 305,310 ****
--- 308,314 ----
do
{
+ /* Here cp[0] == '\\'. */
switch (*++cp)
{
case 'a': /* alert */
*** gettext-5/gettext-runtime/src/ngettext.c Sat Jul 10 20:23:28 2004
--- gettext-6/gettext-runtime/src/ngettext.c Sun Jul 11 02:31:01 2004
***************
*** 253,268 ****
char *retval, *rp;
const char *cp = str;
! do
{
while (cp[0] != '\0' && cp[0] != '\\')
++cp;
}
- while (cp[0] != '\0' && cp[1] != '\0'
- && strchr ("bfnrt\\01234567", cp[1]) == NULL);
-
- if (cp[0] == '\0')
- return str;
retval = (char *) xmalloc (strlen (str));
--- 253,271 ----
char *retval, *rp;
const char *cp = str;
! for (;;)
{
while (cp[0] != '\0' && cp[0] != '\\')
++cp;
+ if (cp[0] == '\0')
+ return str;
+ /* Found a backslash. */
+ if (cp[1] == '\0')
+ return str;
+ if (strchr ("bcfnrt\\01234567", cp[1]) != NULL)
+ break;
+ ++cp;
}
retval = (char *) xmalloc (strlen (str));
***************
*** 271,276 ****
--- 274,280 ----
do
{
+ /* Here cp[0] == '\\'. */
switch (*++cp)
{
case 'a': /* alert */