Mercurial > hg > octave-lyh > gnulib-hg
changeset 10302:3884ac6e6550
getdate.y: avoid locale-dependent date parsing failure
In Turkish locales, getdate would fail to recognize keywords
containing a lowercase "i". The solution is not to rely on
locale-sensitive case-conversion.
* lib/getdate.y: Include <c-ctype.h> rather than <ctype.h>.
(lookup_word): Use c_toupper in place of toupper.
(yylex, get_date): Use c_ prefixed variants of isspace and isalpha, too.
Reported by Vefa Bicakci <bicave@superonline.com> in
<http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/14184>.
* modules/getdate (Depends-on): Add c-ctype.
author | Jim Meyering <meyering@redhat.com> |
---|---|
date | Sat, 02 Aug 2008 15:40:39 +0200 |
parents | 02851f6746a3 |
children | 17acf200b59d |
files | ChangeLog lib/getdate.y modules/getdate |
diffstat | 3 files changed, 21 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2008-08-02 Jim Meyering <meyering@redhat.com> + + getdate.y: avoid locale-dependent date parsing failure + In Turkish locales, getdate would fail to recognize keywords + containing a lowercase "i". The solution is not to rely on + locale-sensitive case-conversion. + * lib/getdate.y: Include <c-ctype.h> rather than <ctype.h>. + (lookup_word): Use c_toupper in place of toupper. + (yylex, get_date): Use c_ prefixed variants of isspace and isalpha, too. + Reported by Vefa Bicakci <bicave@superonline.com> in + <http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/14184>. + * modules/getdate (Depends-on): Add c-ctype. + 2008-08-02 Bruno Haible <bruno@clisp.org> * gnulib-tool (func_import): When updating or creating a .gitignore
--- a/lib/getdate.y +++ b/lib/getdate.y @@ -60,7 +60,7 @@ # undef static #endif -#include <ctype.h> +#include <c-ctype.h> #include <limits.h> #include <stdio.h> #include <stdlib.h> @@ -900,7 +900,7 @@ for (p = word; *p; p++) { unsigned char ch = *p; - *p = toupper (ch); + *p = c_toupper (ch); } for (tp = meridian_table; tp->name; tp++) @@ -965,7 +965,7 @@ for (;;) { - while (c = *pc->input, isspace (c)) + while (c = *pc->input, c_isspace (c)) pc->input++; if (ISDIGIT (c) || c == '-' || c == '+') @@ -976,7 +976,7 @@ if (c == '-' || c == '+') { sign = c == '-' ? -1 : 1; - while (c = *++pc->input, isspace (c)) + while (c = *++pc->input, c_isspace (c)) continue; if (! ISDIGIT (c)) /* skip the '-' sign */ @@ -1080,7 +1080,7 @@ } } - if (isalpha (c)) + if (c_isalpha (c)) { char buff[20]; char *p = buff; @@ -1092,7 +1092,7 @@ *p++ = c; c = *++pc->input; } - while (isalpha (c) || c == '.'); + while (c_isalpha (c) || c == '.'); *p = '\0'; tp = lookup_word (pc, buff); @@ -1205,7 +1205,7 @@ if (! tmp) return false; - while (c = *p, isspace (c)) + while (c = *p, c_isspace (c)) p++; if (strncmp (p, "TZ=\"", 4) == 0)