summaryrefslogtreecommitdiff
path: root/libc
diff options
context:
space:
mode:
authorjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2007-10-11 11:59:55 +0000
committerjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2007-10-11 11:59:55 +0000
commita6a5dd0d5b707d7da7fce387d68dfb5de2905978 (patch)
treea25f8b9e41cc36825f49f5d263fdd6059bc2a835 /libc
parent40520b2931f9d41ca4e3c2f3e8dea6578785624b (diff)
downloadeglibc2-a6a5dd0d5b707d7da7fce387d68dfb5de2905978.tar.gz
Merge changes between r3746 and r3777 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@3778 7b3dc134-2b1b-0410-93df-9e9f96275f8d
Diffstat (limited to 'libc')
-rw-r--r--libc/ChangeLog33
-rw-r--r--libc/locale/programs/ld-collate.c265
-rw-r--r--libc/locale/programs/locfile-kw.gperf5
-rw-r--r--libc/locale/programs/locfile-kw.h604
-rw-r--r--libc/locale/programs/locfile-token.h5
-rw-r--r--libc/localedata/ChangeLog28
-rw-r--r--libc/localedata/de_DE.in6
-rw-r--r--libc/localedata/locales/cs_CZ2
-rw-r--r--libc/localedata/locales/de_DE7
-rw-r--r--libc/localedata/locales/en_US2
-rw-r--r--libc/localedata/locales/fr_FR4
-rw-r--r--libc/localedata/locales/fur_IT2
-rw-r--r--libc/localedata/locales/fy_DE2
-rw-r--r--libc/localedata/locales/hu_HU2
-rw-r--r--libc/localedata/locales/i18n2
-rw-r--r--libc/localedata/locales/iso14651_t1_common4
-rw-r--r--libc/localedata/locales/li_BE2
-rw-r--r--libc/localedata/locales/li_NL2
-rw-r--r--libc/localedata/locales/nds_DE2
-rw-r--r--libc/localedata/locales/nds_NL2
-rw-r--r--libc/localedata/locales/pl_PL2
-rw-r--r--libc/localedata/locales/sc_IT2
-rw-r--r--libc/localedata/locales/sk_SK2
-rw-r--r--libc/nptl/ChangeLog8
-rw-r--r--libc/nptl/sysdeps/pthread/bits/libc-lock.h15
-rw-r--r--libc/nptl/tst-initializers1.c7
-rw-r--r--libc/stdio-common/printf-parse.h22
-rw-r--r--libc/stdio-common/printf-parsemb.c34
-rw-r--r--libc/stdio-common/printf-prs.c9
-rw-r--r--libc/stdio-common/vfprintf.c15
-rw-r--r--libc/sysdeps/unix/sysv/linux/eventfd_read.c2
-rw-r--r--libc/sysdeps/unix/sysv/linux/eventfd_write.c3
-rw-r--r--libc/sysdeps/x86_64/cacheinfo.c8
33 files changed, 741 insertions, 369 deletions
diff --git a/libc/ChangeLog b/libc/ChangeLog
index e4ccedacc..7ca024625 100644
--- a/libc/ChangeLog
+++ b/libc/ChangeLog
@@ -1,3 +1,36 @@
+2007-10-10 Ulrich Drepper <drepper@redhat.com>
+
+ * locale/programs/locfile-token.h: Remove tok_elif, add tok_elifdef
+ and tok_elifndef.
+ * locale/programs/locfile-kw.gperf: Likewise.
+ * locale/programs/ld-collate.c: Implement primitive preprocessor.
+
+2007-10-10 Jakub Jelinek <jakub@redhat.com>
+
+ * stdio-common/printf-parse.h: Include string.h and wchar.h.
+ (__find_specwc): Change into __extern_always_inline function.
+ (__find_specmb): Likewise. Remove ps argument. Use __strchrnul.
+ (__parse_one_specmb): Remove ps argument.
+ * stdio-common/vfprintf.c (vfprintf): Remove mbstate variable.
+ Adjust __find_specmb and __parse_one_specmb callers.
+ * stdio-common/printf-prs.c (parse_printf_format): Likewise.
+ * stdio-common/printf-parsemb.c (__find_specwc, __find_specmb):
+ Removed.
+ (__parse_one_specmb): Remove ps argument, adjust __find_specmb
+ caller.
+
+2007-10-09 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/x86_64/cacheinfo.c (init_cacheinfo): Work around problem
+ with some Pentium Ds.
+
+2007-10-08 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/eventfd_read.c (eventfd_read): Use
+ __read not read.
+ * sysdeps/unix/sysv/linux/eventfd_write.c (eventfd_write): Use
+ __write not write.
+
2007-10-07 Ulrich Drepper <drepper@redhat.com>
[BZ #181]
diff --git a/libc/locale/programs/ld-collate.c b/libc/locale/programs/ld-collate.c
index 2aa9557c5..67eb2b21c 100644
--- a/libc/locale/programs/ld-collate.c
+++ b/libc/locale/programs/ld-collate.c
@@ -185,6 +185,14 @@ struct symbol_t
#include "3level.h"
+/* Simple name list for the preprocessor. */
+struct name_list
+{
+ struct name_list *next;
+ char str[0];
+};
+
+
/* The real definition of the struct for the LC_COLLATE locale. */
struct locale_collate_t
{
@@ -244,6 +252,15 @@ struct locale_collate_t
/* The arrays with the collation sequence order. */
unsigned char mbseqorder[256];
struct collseq_table wcseqorder;
+
+ /* State of the preprocessor. */
+ enum
+ {
+ else_none = 0,
+ else_ignore,
+ else_seen
+ }
+ else_action;
};
@@ -251,6 +268,9 @@ struct locale_collate_t
LC_COLLATE category descriptions in all files. */
static uint32_t nrules;
+/* List of defined preprocessor symbols. */
+static struct name_list *defined;
+
/* We need UTF-8 encoding of numbers. */
static inline int
@@ -2478,6 +2498,43 @@ collate_output (struct localedef_t *locale, const struct charmap_t *charmap,
}
+static enum token_t
+skip_to (struct linereader *ldfile, struct locale_collate_t *collate,
+ const struct charmap_t *charmap, int to_endif)
+{
+ while (1)
+ {
+ struct token *now = lr_token (ldfile, charmap, NULL, NULL, 0);
+ enum token_t nowtok = now->tok;
+
+ if (nowtok == tok_eof || nowtok == tok_end)
+ return nowtok;
+
+ if (nowtok == tok_ifdef || nowtok == tok_ifndef)
+ {
+ lr_error (ldfile, _("%s: nested conditionals not supported"),
+ "LC_COLLATE");
+ nowtok = skip_to (ldfile, collate, charmap, tok_endif);
+ if (nowtok == tok_eof || nowtok == tok_end)
+ return nowtok;
+ }
+ else if ((!to_endif && (nowtok == tok_else || nowtok == tok_elifdef
+ || nowtok == tok_elifndef))
+ || nowtok == tok_endif)
+ {
+ lr_ignore_rest (ldfile, 1);
+ return nowtok;
+ }
+ else if (nowtok == tok_else)
+ {
+ lr_error (ldfile, _("%s: more then one 'else'"), "LC_COLLATE");
+ }
+
+ lr_ignore_rest (ldfile, 0);
+ }
+}
+
+
void
collate_read (struct linereader *ldfile, struct localedef_t *result,
const struct charmap_t *charmap, const char *repertoire_name,
@@ -2515,6 +2572,38 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
}
while (nowtok == tok_eol);
+ while (nowtok == tok_define)
+ {
+ if (ignore_content)
+ {
+ lr_ignore_rest (ldfile, 0);
+ continue;
+ }
+
+ arg = lr_token (ldfile, charmap, result, NULL, verbose);
+ if (arg->tok != tok_ident)
+ SYNTAX_ERROR (_("%s: syntax error"), "LC_COLLATE");
+ else
+ {
+ /* Simply add the new symbol. */
+ struct name_list *newsym = xmalloc (sizeof (*newsym)
+ + arg->val.str.lenmb + 1);
+ memcpy (newsym->str, arg->val.str.startmb, arg->val.str.lenmb);
+ newsym->str[arg->val.str.lenmb] = '\0';
+ newsym->next = defined;
+ defined = newsym;
+
+ lr_ignore_rest (ldfile, 1);
+ }
+
+ do
+ {
+ now = lr_token (ldfile, charmap, result, NULL, verbose);
+ nowtok = now->tok;
+ }
+ while (nowtok == tok_eol);
+ }
+
if (nowtok == tok_copy)
{
now = lr_token (ldfile, charmap, result, NULL, verbose);
@@ -3654,6 +3743,7 @@ error while adding equivalent collating symbol"));
break;
case tok_end:
+ seen_end:
/* Next we assume `LC_COLLATE'. */
if (!ignore_content)
{
@@ -3694,6 +3784,180 @@ error while adding equivalent collating symbol"));
lr_ignore_rest (ldfile, arg->tok == tok_lc_collate);
return;
+ case tok_define:
+ if (ignore_content)
+ {
+ lr_ignore_rest (ldfile, 0);
+ break;
+ }
+
+ arg = lr_token (ldfile, charmap, result, NULL, verbose);
+ if (arg->tok != tok_ident)
+ goto err_label;
+
+ /* Simply add the new symbol. */
+ struct name_list *newsym = xmalloc (sizeof (*newsym)
+ + arg->val.str.lenmb + 1);
+ memcpy (newsym->str, arg->val.str.startmb, arg->val.str.lenmb);
+ newsym->str[arg->val.str.lenmb] = '\0';
+ newsym->next = defined;
+ defined = newsym;
+
+ lr_ignore_rest (ldfile, 1);
+ break;
+
+ case tok_undef:
+ if (ignore_content)
+ {
+ lr_ignore_rest (ldfile, 0);
+ break;
+ }
+
+ arg = lr_token (ldfile, charmap, result, NULL, verbose);
+ if (arg->tok != tok_ident)
+ goto err_label;
+
+ /* Remove _all_ occurrences of the symbol from the list. */
+ struct name_list *prevdef = NULL;
+ struct name_list *curdef = defined;
+ while (curdef != NULL)
+ if (strncmp (arg->val.str.startmb, curdef->str,
+ arg->val.str.lenmb) == 0
+ && curdef->str[arg->val.str.lenmb] == '\0')
+ {
+ if (prevdef == NULL)
+ defined = curdef->next;
+ else
+ prevdef->next = curdef->next;
+
+ struct name_list *olddef = curdef;
+ curdef = curdef->next;
+
+ free (olddef);
+ }
+ else
+ {
+ prevdef = curdef;
+ curdef = curdef->next;
+ }
+
+ lr_ignore_rest (ldfile, 1);
+ break;
+
+ case tok_ifdef:
+ case tok_ifndef:
+ if (ignore_content)
+ {
+ lr_ignore_rest (ldfile, 0);
+ break;
+ }
+
+ found_ifdef:
+ arg = lr_token (ldfile, charmap, result, NULL, verbose);
+ if (arg->tok != tok_ident)
+ goto err_label;
+ lr_ignore_rest (ldfile, 1);
+
+ if (collate->else_action == else_none)
+ {
+ curdef = defined;
+ while (curdef != NULL)
+ if (strncmp (arg->val.str.startmb, curdef->str,
+ arg->val.str.lenmb) == 0
+ && curdef->str[arg->val.str.lenmb] == '\0')
+ break;
+
+ if ((nowtok == tok_ifdef && curdef != NULL)
+ || (nowtok == tok_ifndef && curdef == NULL))
+ {
+ /* We have to use the if-branch. */
+ collate->else_action = else_ignore;
+ }
+ else
+ {
+ /* We have to use the else-branch, if there is one. */
+ nowtok = skip_to (ldfile, collate, charmap, 0);
+ if (nowtok == tok_else)
+ collate->else_action = else_seen;
+ else if (nowtok == tok_elifdef)
+ {
+ nowtok = tok_ifdef;
+ goto found_ifdef;
+ }
+ else if (nowtok == tok_elifndef)
+ {
+ nowtok = tok_ifndef;
+ goto found_ifdef;
+ }
+ else if (nowtok == tok_eof)
+ goto seen_eof;
+ else if (nowtok == tok_end)
+ goto seen_end;
+ }
+ }
+ else
+ {
+ /* XXX Should it really become necessary to support nested
+ preprocessor handling we will push the state here. */
+ lr_error (ldfile, _("%s: nested conditionals not supported"),
+ "LC_COLLATE");
+ nowtok = skip_to (ldfile, collate, charmap, 1);
+ if (nowtok == tok_eof)
+ goto seen_eof;
+ else if (nowtok == tok_end)
+ goto seen_end;
+ }
+ break;
+
+ case tok_elifdef:
+ case tok_elifndef:
+ case tok_else:
+ if (ignore_content)
+ {
+ lr_ignore_rest (ldfile, 0);
+ break;
+ }
+
+ lr_ignore_rest (ldfile, 1);
+
+ if (collate->else_action == else_ignore)
+ {
+ /* Ignore everything until the endif. */
+ nowtok = skip_to (ldfile, collate, charmap, 1);
+ if (nowtok == tok_eof)
+ goto seen_eof;
+ else if (nowtok == tok_end)
+ goto seen_end;
+ }
+ else
+ {
+ assert (collate->else_action == else_none);
+ lr_error (ldfile, _("\
+%s: '%s' without matching 'ifdef' or 'ifndef'"), "LC_COLLATE",
+ nowtok == tok_else ? "else"
+ : nowtok == tok_elifdef ? "elifdef" : "elifndef");
+ }
+ break;
+
+ case tok_endif:
+ if (ignore_content)
+ {
+ lr_ignore_rest (ldfile, 0);
+ break;
+ }
+
+ lr_ignore_rest (ldfile, 1);
+
+ if (collate->else_action != else_ignore
+ && collate->else_action != else_seen)
+ lr_error (ldfile, _("\
+%s: 'endif' without matching 'ifdef' or 'ifndef'"), "LC_COLLATE");
+
+ /* XXX If we support nested preprocessor directives we pop
+ the state here. */
+ collate->else_action = else_none;
+ break;
+
default:
err_label:
SYNTAX_ERROR (_("%s: syntax error"), "LC_COLLATE");
@@ -3704,6 +3968,7 @@ error while adding equivalent collating symbol"));
nowtok = now->tok;
}
+ seen_eof:
/* When we come here we reached the end of the file. */
lr_error (ldfile, _("%s: premature end of file"), "LC_COLLATE");
}
diff --git a/libc/locale/programs/locfile-kw.gperf b/libc/locale/programs/locfile-kw.gperf
index 936256ab3..f0612e488 100644
--- a/libc/locale/programs/locfile-kw.gperf
+++ b/libc/locale/programs/locfile-kw.gperf
@@ -1,5 +1,5 @@
%{
-/* Copyright (C) 1996,1997,1998,1999,2000,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2000,2005,2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
@@ -76,7 +76,8 @@ define, tok_define, 0
undef, tok_undef, 0
ifdef, tok_ifdef, 0
else, tok_else, 0
-elif, tok_elif, 0
+elifdef, tok_elifdef, 0
+elifndef, tok_elifndef, 0
endif, tok_endif, 0
LC_MONETARY, tok_lc_monetary, 0
int_curr_symbol, tok_int_curr_symbol, 0
diff --git a/libc/locale/programs/locfile-kw.h b/libc/locale/programs/locfile-kw.h
index c883842b3..c0f9ce781 100644
--- a/libc/locale/programs/locfile-kw.h
+++ b/libc/locale/programs/locfile-kw.h
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.1 */
+/* ANSI-C code produced by gperf version 3.0.2 */
/* Command-line: gperf -acCgopt -k'1,2,5,9,$' -L ANSI-C -N locfile_hash locfile-kw.gperf */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -30,7 +30,7 @@
#line 1 "locfile-kw.gperf"
-/* Copyright (C) 1996,1997,1998,1999,2000,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2000,2005,2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
@@ -51,15 +51,15 @@
#include <string.h>
#include "locfile-token.h"
-#line 23 "locfile-kw.gperf"
+#line 24 "locfile-kw.gperf"
struct keyword_t ;
-#define TOTAL_KEYWORDS 175
+#define TOTAL_KEYWORDS 176
#define MIN_WORD_LENGTH 3
#define MAX_WORD_LENGTH 22
#define MIN_HASH_VALUE 3
-#define MAX_HASH_VALUE 610
-/* maximum key range = 608, duplicates = 0 */
+#define MAX_HASH_VALUE 630
+/* maximum key range = 628, duplicates = 0 */
#ifdef __GNUC__
__inline
@@ -73,32 +73,32 @@ hash (register const char *str, register unsigned int len)
{
static const unsigned short asso_values[] =
{
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 5, 0, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 5, 611, 0, 0, 0,
- 0, 0, 10, 0, 611, 611, 0, 611, 0, 5,
- 611, 611, 0, 0, 0, 10, 611, 611, 611, 0,
- 611, 611, 611, 611, 611, 0, 611, 145, 105, 25,
- 15, 0, 190, 110, 10, 35, 611, 0, 80, 65,
- 5, 130, 40, 50, 5, 0, 10, 35, 50, 20,
- 5, 10, 0, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611, 611, 611, 611, 611,
- 611, 611, 611, 611, 611, 611
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 5, 0, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 5, 631, 0, 0, 0,
+ 0, 0, 10, 0, 631, 631, 0, 631, 0, 5,
+ 631, 631, 0, 0, 0, 10, 631, 631, 631, 0,
+ 631, 631, 631, 631, 631, 0, 631, 145, 80, 25,
+ 15, 0, 180, 105, 10, 35, 631, 50, 80, 160,
+ 5, 130, 40, 45, 5, 0, 10, 35, 40, 35,
+ 5, 10, 0, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631, 631, 631, 631, 631,
+ 631, 631, 631, 631, 631, 631
};
register int hval = len;
@@ -134,470 +134,472 @@ locfile_hash (register const char *str, register unsigned int len)
static const struct keyword_t wordlist[] =
{
{""}, {""}, {""},
-#line 30 "locfile-kw.gperf"
+#line 31 "locfile-kw.gperf"
{"END", tok_end, 0},
{""}, {""},
-#line 69 "locfile-kw.gperf"
+#line 70 "locfile-kw.gperf"
{"IGNORE", tok_ignore, 0},
-#line 127 "locfile-kw.gperf"
+#line 129 "locfile-kw.gperf"
{"LC_TIME", tok_lc_time, 0},
-#line 29 "locfile-kw.gperf"
+#line 30 "locfile-kw.gperf"
{"LC_CTYPE", tok_lc_ctype, 0},
{""},
-#line 164 "locfile-kw.gperf"
+#line 166 "locfile-kw.gperf"
{"LC_ADDRESS", tok_lc_address, 0},
-#line 149 "locfile-kw.gperf"
+#line 151 "locfile-kw.gperf"
{"LC_MESSAGES", tok_lc_messages, 0},
-#line 157 "locfile-kw.gperf"
+#line 159 "locfile-kw.gperf"
{"LC_NAME", tok_lc_name, 0},
-#line 154 "locfile-kw.gperf"
+#line 156 "locfile-kw.gperf"
{"LC_PAPER", tok_lc_paper, 0},
-#line 182 "locfile-kw.gperf"
+#line 184 "locfile-kw.gperf"
{"LC_MEASUREMENT", tok_lc_measurement, 0},
-#line 55 "locfile-kw.gperf"
+#line 56 "locfile-kw.gperf"
{"LC_COLLATE", tok_lc_collate, 0},
{""},
-#line 184 "locfile-kw.gperf"
+#line 186 "locfile-kw.gperf"
{"LC_IDENTIFICATION", tok_lc_identification, 0},
-#line 197 "locfile-kw.gperf"
+#line 199 "locfile-kw.gperf"
{"revision", tok_revision, 0},
-#line 68 "locfile-kw.gperf"
+#line 69 "locfile-kw.gperf"
{"UNDEFINED", tok_undefined, 0},
-#line 123 "locfile-kw.gperf"
+#line 125 "locfile-kw.gperf"
{"LC_NUMERIC", tok_lc_numeric, 0},
-#line 80 "locfile-kw.gperf"
+#line 82 "locfile-kw.gperf"
{"LC_MONETARY", tok_lc_monetary, 0},
-#line 177 "locfile-kw.gperf"
+#line 179 "locfile-kw.gperf"
{"LC_TELEPHONE", tok_lc_telephone, 0},
- {""},
-#line 130 "locfile-kw.gperf"
- {"week", tok_week, 0},
- {""},
-#line 74 "locfile-kw.gperf"
+ {""}, {""}, {""},
+#line 75 "locfile-kw.gperf"
{"define", tok_define, 0},
-#line 150 "locfile-kw.gperf"
+#line 152 "locfile-kw.gperf"
{"yesexpr", tok_yesexpr, 0},
-#line 139 "locfile-kw.gperf"
+#line 141 "locfile-kw.gperf"
{"era_year", tok_era_year, 0},
{""},
-#line 53 "locfile-kw.gperf"
+#line 54 "locfile-kw.gperf"
{"translit_ignore", tok_translit_ignore, 0},
-#line 152 "locfile-kw.gperf"
+#line 154 "locfile-kw.gperf"
{"yesstr", tok_yesstr, 0},
{""},
-#line 87 "locfile-kw.gperf"
+#line 89 "locfile-kw.gperf"
{"negative_sign", tok_negative_sign, 0},
{""},
-#line 135 "locfile-kw.gperf"
+#line 137 "locfile-kw.gperf"
{"t_fmt", tok_t_fmt, 0},
-#line 155 "locfile-kw.gperf"
+#line 157 "locfile-kw.gperf"
{"height", tok_height, 0},
{""}, {""},
-#line 51 "locfile-kw.gperf"
+#line 52 "locfile-kw.gperf"
{"translit_start", tok_translit_start, 0},
-#line 134 "locfile-kw.gperf"
+#line 136 "locfile-kw.gperf"
{"d_fmt", tok_d_fmt, 0},
{""},
-#line 52 "locfile-kw.gperf"
+#line 53 "locfile-kw.gperf"
{"translit_end", tok_translit_end, 0},
-#line 92 "locfile-kw.gperf"
+#line 94 "locfile-kw.gperf"
{"n_cs_precedes", tok_n_cs_precedes, 0},
-#line 142 "locfile-kw.gperf"
+#line 144 "locfile-kw.gperf"
{"era_t_fmt", tok_era_t_fmt, 0},
-#line 38 "locfile-kw.gperf"
+#line 39 "locfile-kw.gperf"
{"space", tok_space, 0},
-#line 71 "locfile-kw.gperf"
- {"reorder-end", tok_reorder_end, 0},
#line 72 "locfile-kw.gperf"
+ {"reorder-end", tok_reorder_end, 0},
+#line 73 "locfile-kw.gperf"
{"reorder-sections-after", tok_reorder_sections_after, 0},
{""},
-#line 140 "locfile-kw.gperf"
+#line 142 "locfile-kw.gperf"
{"era_d_fmt", tok_era_d_fmt, 0},
-#line 185 "locfile-kw.gperf"
+#line 187 "locfile-kw.gperf"
{"title", tok_title, 0},
{""}, {""},
-#line 147 "locfile-kw.gperf"
+#line 149 "locfile-kw.gperf"
{"timezone", tok_timezone, 0},
{""},
-#line 73 "locfile-kw.gperf"
+#line 74 "locfile-kw.gperf"
{"reorder-sections-end", tok_reorder_sections_end, 0},
{""}, {""}, {""},
-#line 93 "locfile-kw.gperf"
+#line 95 "locfile-kw.gperf"
{"n_sep_by_space", tok_n_sep_by_space, 0},
{""}, {""},
-#line 98 "locfile-kw.gperf"
+#line 100 "locfile-kw.gperf"
{"int_n_cs_precedes", tok_int_n_cs_precedes, 0},
{""}, {""}, {""},
-#line 25 "locfile-kw.gperf"
+#line 26 "locfile-kw.gperf"
{"escape_char", tok_escape_char, 0},
{""},
-#line 27 "locfile-kw.gperf"
+#line 28 "locfile-kw.gperf"
{"repertoiremap", tok_repertoiremap, 0},
-#line 45 "locfile-kw.gperf"
+#line 46 "locfile-kw.gperf"
{"charclass", tok_charclass, 0},
-#line 42 "locfile-kw.gperf"
- {"print", tok_print, 0},
#line 43 "locfile-kw.gperf"
+ {"print", tok_print, 0},
+#line 44 "locfile-kw.gperf"
{"xdigit", tok_xdigit, 0},
-#line 108 "locfile-kw.gperf"
+#line 110 "locfile-kw.gperf"
{"duo_n_cs_precedes", tok_duo_n_cs_precedes, 0},
-#line 125 "locfile-kw.gperf"
+#line 127 "locfile-kw.gperf"
{"thousands_sep", tok_thousands_sep, 0},
-#line 193 "locfile-kw.gperf"
+#line 195 "locfile-kw.gperf"
{"territory", tok_territory, 0},
-#line 35 "locfile-kw.gperf"
+#line 36 "locfile-kw.gperf"
{"digit", tok_digit, 0},
{""}, {""},
-#line 90 "locfile-kw.gperf"
+#line 92 "locfile-kw.gperf"
{"p_cs_precedes", tok_p_cs_precedes, 0},
- {""},
-#line 156 "locfile-kw.gperf"
- {"width", tok_width, 0},
-#line 61 "locfile-kw.gperf"
+ {""}, {""},
+#line 62 "locfile-kw.gperf"
{"script", tok_script, 0},
-#line 28 "locfile-kw.gperf"
+#line 29 "locfile-kw.gperf"
{"include", tok_include, 0},
{""},
-#line 77 "locfile-kw.gperf"
+#line 78 "locfile-kw.gperf"
{"else", tok_else, 0},
-#line 180 "locfile-kw.gperf"
+#line 182 "locfile-kw.gperf"
{"int_select", tok_int_select, 0},
- {""}, {""}, {""}, {""},
-#line 32 "locfile-kw.gperf"
+ {""}, {""}, {""},
+#line 132 "locfile-kw.gperf"
+ {"week", tok_week, 0},
+#line 33 "locfile-kw.gperf"
{"upper", tok_upper, 0},
{""}, {""},
-#line 190 "locfile-kw.gperf"
+#line 192 "locfile-kw.gperf"
{"tel", tok_tel, 0},
-#line 91 "locfile-kw.gperf"
+#line 93 "locfile-kw.gperf"
{"p_sep_by_space", tok_p_sep_by_space, 0},
- {""}, {""},
-#line 96 "locfile-kw.gperf"
+#line 158 "locfile-kw.gperf"
+ {"width", tok_width, 0},
+ {""},
+#line 98 "locfile-kw.gperf"
{"int_p_cs_precedes", tok_int_p_cs_precedes, 0},
{""}, {""},
-#line 40 "locfile-kw.gperf"
+#line 41 "locfile-kw.gperf"
{"punct", tok_punct, 0},
{""}, {""},
-#line 99 "locfile-kw.gperf"
+#line 101 "locfile-kw.gperf"
{"int_n_sep_by_space", tok_int_n_sep_by_space, 0},
{""}, {""}, {""},
-#line 106 "locfile-kw.gperf"
+#line 108 "locfile-kw.gperf"
{"duo_p_cs_precedes", tok_duo_p_cs_precedes, 0},
- {""}, {""},
-#line 46 "locfile-kw.gperf"
+#line 48 "locfile-kw.gperf"
+ {"charconv", tok_charconv, 0},
+ {""},
+#line 47 "locfile-kw.gperf"
{"class", tok_class, 0},
-#line 112 "locfile-kw.gperf"
+#line 114 "locfile-kw.gperf"
{"duo_int_n_cs_precedes", tok_duo_int_n_cs_precedes, 0},
-#line 113 "locfile-kw.gperf"
+#line 115 "locfile-kw.gperf"
{"duo_int_n_sep_by_space", tok_duo_int_n_sep_by_space, 0},
-#line 109 "locfile-kw.gperf"
+#line 111 "locfile-kw.gperf"
{"duo_n_sep_by_space", tok_duo_n_sep_by_space, 0},
-#line 117 "locfile-kw.gperf"
+#line 119 "locfile-kw.gperf"
{"duo_int_n_sign_posn", tok_duo_int_n_sign_posn, 0},
- {""}, {""}, {""},
-#line 47 "locfile-kw.gperf"
- {"charconv", tok_charconv, 0},
- {""}, {""},
-#line 183 "locfile-kw.gperf"
- {"measurement", tok_measurement, 0},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 57 "locfile-kw.gperf"
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""},
+#line 58 "locfile-kw.gperf"
{"section-symbol", tok_section_symbol, 0},
-#line 181 "locfile-kw.gperf"
+#line 183 "locfile-kw.gperf"
{"int_prefix", tok_int_prefix, 0},
{""}, {""}, {""}, {""},
-#line 137 "locfile-kw.gperf"
- {"t_fmt_ampm", tok_t_fmt_ampm, 0},
- {""}, {""},
-#line 97 "locfile-kw.gperf"
- {"int_p_sep_by_space", tok_int_p_sep_by_space, 0},
- {""},
-#line 41 "locfile-kw.gperf"
+#line 42 "locfile-kw.gperf"
{"graph", tok_graph, 0},
{""}, {""},
-#line 124 "locfile-kw.gperf"
- {"decimal_point", tok_decimal_point, 0},
- {""}, {""},
-#line 110 "locfile-kw.gperf"
+#line 99 "locfile-kw.gperf"
+ {"int_p_sep_by_space", tok_int_p_sep_by_space, 0},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 112 "locfile-kw.gperf"
{"duo_int_p_cs_precedes", tok_duo_int_p_cs_precedes, 0},
-#line 111 "locfile-kw.gperf"
+#line 113 "locfile-kw.gperf"
{"duo_int_p_sep_by_space", tok_duo_int_p_sep_by_space, 0},
-#line 107 "locfile-kw.gperf"
+#line 109 "locfile-kw.gperf"
{"duo_p_sep_by_space", tok_duo_p_sep_by_space, 0},
-#line 116 "locfile-kw.gperf"
+#line 118 "locfile-kw.gperf"
{"duo_int_p_sign_posn", tok_duo_int_p_sign_posn, 0},
-#line 153 "locfile-kw.gperf"
+#line 155 "locfile-kw.gperf"
{"nostr", tok_nostr, 0},
{""}, {""},
-#line 138 "locfile-kw.gperf"
+#line 140 "locfile-kw.gperf"
{"era", tok_era, 0},
{""},
-#line 82 "locfile-kw.gperf"
+#line 84 "locfile-kw.gperf"
{"currency_symbol", tok_currency_symbol, 0},
{""},
-#line 163 "locfile-kw.gperf"
+#line 165 "locfile-kw.gperf"
{"name_ms", tok_name_ms, 0},
-#line 161 "locfile-kw.gperf"
+#line 163 "locfile-kw.gperf"
{"name_mrs", tok_name_mrs, 0},
-#line 162 "locfile-kw.gperf"
+#line 164 "locfile-kw.gperf"
{"name_miss", tok_name_miss, 0},
-#line 81 "locfile-kw.gperf"
+#line 83 "locfile-kw.gperf"
{"int_curr_symbol", tok_int_curr_symbol, 0},
-#line 186 "locfile-kw.gperf"
+#line 188 "locfile-kw.gperf"
{"source", tok_source, 0},
-#line 160 "locfile-kw.gperf"
+#line 162 "locfile-kw.gperf"
{"name_mr", tok_name_mr, 0},
-#line 159 "locfile-kw.gperf"
+#line 161 "locfile-kw.gperf"
{"name_gen", tok_name_gen, 0},
-#line 198 "locfile-kw.gperf"
+#line 200 "locfile-kw.gperf"
{"date", tok_date, 0},
{""}, {""},
-#line 187 "locfile-kw.gperf"
+#line 189 "locfile-kw.gperf"
{"address", tok_address, 0},
-#line 158 "locfile-kw.gperf"
+#line 160 "locfile-kw.gperf"
{"name_fmt", tok_name_fmt, 0},
-#line 31 "locfile-kw.gperf"
+#line 32 "locfile-kw.gperf"
{"copy", tok_copy, 0},
- {""}, {""},
-#line 49 "locfile-kw.gperf"
- {"tolower", tok_tolower, 0},
-#line 129 "locfile-kw.gperf"
- {"day", tok_day, 0},
#line 103 "locfile-kw.gperf"
- {"duo_currency_symbol", tok_duo_currency_symbol, 0},
-#line 101 "locfile-kw.gperf"
{"int_n_sign_posn", tok_int_n_sign_posn, 0},
{""}, {""},
-#line 148 "locfile-kw.gperf"
+#line 131 "locfile-kw.gperf"
+ {"day", tok_day, 0},
+#line 105 "locfile-kw.gperf"
+ {"duo_currency_symbol", tok_duo_currency_symbol, 0},
+ {""}, {""}, {""},
+#line 150 "locfile-kw.gperf"
{"date_fmt", tok_date_fmt, 0},
-#line 63 "locfile-kw.gperf"
+#line 64 "locfile-kw.gperf"
{"order_end", tok_order_end, 0},
- {""}, {""},
-#line 166 "locfile-kw.gperf"
+#line 117 "locfile-kw.gperf"
+ {"duo_n_sign_posn", tok_duo_n_sign_posn, 0},
+ {""},
+#line 168 "locfile-kw.gperf"
{"country_name", tok_country_name, 0},
-#line 70 "locfile-kw.gperf"
+#line 71 "locfile-kw.gperf"
{"reorder-after", tok_reorder_after, 0},
-#line 118 "locfile-kw.gperf"
- {"uno_valid_from", tok_uno_valid_from, 0},
-#line 115 "locfile-kw.gperf"
- {"duo_n_sign_posn", tok_duo_n_sign_posn, 0},
-#line 151 "locfile-kw.gperf"
+ {""}, {""},
+#line 153 "locfile-kw.gperf"
{"noexpr", tok_noexpr, 0},
- {""},
-#line 194 "locfile-kw.gperf"
+#line 50 "locfile-kw.gperf"
+ {"tolower", tok_tolower, 0},
+#line 196 "locfile-kw.gperf"
{"audience", tok_audience, 0},
- {""},
-#line 44 "locfile-kw.gperf"
- {"blank", tok_blank, 0},
- {""},
-#line 48 "locfile-kw.gperf"
+ {""}, {""}, {""},
+#line 49 "locfile-kw.gperf"
{"toupper", tok_toupper, 0},
-#line 67 "locfile-kw.gperf"
+#line 68 "locfile-kw.gperf"
{"position", tok_position, 0},
-#line 120 "locfile-kw.gperf"
- {"duo_valid_from", tok_duo_valid_from, 0},
-#line 39 "locfile-kw.gperf"
+ {""},
+#line 40 "locfile-kw.gperf"
{"cntrl", tok_cntrl, 0},
{""},
-#line 26 "locfile-kw.gperf"
+#line 27 "locfile-kw.gperf"
{"comment_char", tok_comment_char, 0},
-#line 86 "locfile-kw.gperf"
+#line 88 "locfile-kw.gperf"
{"positive_sign", tok_positive_sign, 0},
{""}, {""}, {""}, {""},
-#line 132 "locfile-kw.gperf"
- {"mon", tok_mon, 0},
- {""}, {""},
-#line 171 "locfile-kw.gperf"
- {"country_car", tok_country_car, 0},
- {""},
-#line 60 "locfile-kw.gperf"
+#line 61 "locfile-kw.gperf"
{"symbol-equivalence", tok_symbol_equivalence, 0},
+ {""},
#line 102 "locfile-kw.gperf"
- {"duo_int_curr_symbol", tok_duo_int_curr_symbol, 0},
-#line 100 "locfile-kw.gperf"
{"int_p_sign_posn", tok_int_p_sign_posn, 0},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 172 "locfile-kw.gperf"
+#line 173 "locfile-kw.gperf"
+ {"country_car", tok_country_car, 0},
+ {""}, {""},
+#line 104 "locfile-kw.gperf"
+ {"duo_int_curr_symbol", tok_duo_int_curr_symbol, 0},
+ {""}, {""},
+#line 135 "locfile-kw.gperf"
+ {"d_t_fmt", tok_d_t_fmt, 0},
+ {""}, {""},
+#line 116 "locfile-kw.gperf"
+ {"duo_p_sign_posn", tok_duo_p_sign_posn, 0},
+#line 185 "locfile-kw.gperf"
+ {"measurement", tok_measurement, 0},
+#line 174 "locfile-kw.gperf"
{"country_isbn", tok_country_isbn, 0},
-#line 36 "locfile-kw.gperf"
+#line 37 "locfile-kw.gperf"
{"outdigit", tok_outdigit, 0},
- {""},
-#line 114 "locfile-kw.gperf"
- {"duo_p_sign_posn", tok_duo_p_sign_posn, 0},
- {""},
-#line 133 "locfile-kw.gperf"
- {"d_t_fmt", tok_d_t_fmt, 0},
{""}, {""},
-#line 33 "locfile-kw.gperf"
+#line 143 "locfile-kw.gperf"
+ {"era_d_t_fmt", tok_era_d_t_fmt, 0},
+ {""}, {""}, {""},
+#line 34 "locfile-kw.gperf"
{"lower", tok_lower, 0},
- {""},
-#line 167 "locfile-kw.gperf"
+#line 181 "locfile-kw.gperf"
+ {"tel_dom_fmt", tok_tel_dom_fmt, 0},
+#line 169 "locfile-kw.gperf"
{"country_post", tok_country_post, 0},
-#line 146 "locfile-kw.gperf"
+#line 148 "locfile-kw.gperf"
{"cal_direction", tok_cal_direction, 0},
{""},
-#line 189 "locfile-kw.gperf"
- {"email", tok_email, 0},
-#line 141 "locfile-kw.gperf"
- {"era_d_t_fmt", tok_era_d_t_fmt, 0},
+#line 139 "locfile-kw.gperf"
+ {"t_fmt_ampm", tok_t_fmt_ampm, 0},
+#line 91 "locfile-kw.gperf"
+ {"frac_digits", tok_frac_digits, 0},
{""}, {""},
-#line 173 "locfile-kw.gperf"
+#line 175 "locfile-kw.gperf"
{"lang_name", tok_lang_name, 0},
- {""},
-#line 179 "locfile-kw.gperf"
- {"tel_dom_fmt", tok_tel_dom_fmt, 0},
- {""}, {""}, {""},
-#line 54 "locfile-kw.gperf"
- {"default_missing", tok_default_missing, 0},
-#line 89 "locfile-kw.gperf"
- {"frac_digits", tok_frac_digits, 0},
- {""}, {""}, {""},
-#line 88 "locfile-kw.gperf"
+#line 90 "locfile-kw.gperf"
{"int_frac_digits", tok_int_frac_digits, 0},
-#line 170 "locfile-kw.gperf"
- {"country_num", tok_country_num, 0},
-#line 119 "locfile-kw.gperf"
+ {""},
+#line 121 "locfile-kw.gperf"
{"uno_valid_to", tok_uno_valid_to, 0},
- {""}, {""}, {""}, {""}, {""},
-#line 50 "locfile-kw.gperf"
- {"map", tok_map, 0},
+#line 126 "locfile-kw.gperf"
+ {"decimal_point", tok_decimal_point, 0},
{""},
-#line 105 "locfile-kw.gperf"
+#line 133 "locfile-kw.gperf"
+ {"abmon", tok_abmon, 0},
+ {""}, {""}, {""}, {""},
+#line 107 "locfile-kw.gperf"
{"duo_frac_digits", tok_duo_frac_digits, 0},
-#line 178 "locfile-kw.gperf"
+#line 180 "locfile-kw.gperf"
{"tel_int_fmt", tok_tel_int_fmt, 0},
-#line 121 "locfile-kw.gperf"
+#line 123 "locfile-kw.gperf"
{"duo_valid_to", tok_duo_valid_to, 0},
-#line 144 "locfile-kw.gperf"
+#line 146 "locfile-kw.gperf"
{"first_weekday", tok_first_weekday, 0},
{""},
-#line 143 "locfile-kw.gperf"
- {"alt_digits", tok_alt_digits, 0},
-#line 95 "locfile-kw.gperf"
+#line 130 "locfile-kw.gperf"
+ {"abday", tok_abday, 0},
+ {""},
+#line 198 "locfile-kw.gperf"
+ {"abbreviation", tok_abbreviation, 0},
+#line 147 "locfile-kw.gperf"
+ {"first_workday", tok_first_workday, 0},
+ {""}, {""},
+#line 97 "locfile-kw.gperf"
{"n_sign_posn", tok_n_sign_posn, 0},
-#line 84 "locfile-kw.gperf"
- {"mon_thousands_sep", tok_mon_thousands_sep, 0},
+ {""}, {""}, {""},
#line 145 "locfile-kw.gperf"
- {"first_workday", tok_first_workday, 0},
-#line 64 "locfile-kw.gperf"
- {"from", tok_from, 0},
-#line 131 "locfile-kw.gperf"
- {"abmon", tok_abmon, 0},
+ {"alt_digits", tok_alt_digits, 0},
{""}, {""},
-#line 192 "locfile-kw.gperf"
- {"language", tok_language, 0},
+#line 128 "locfile-kw.gperf"
+ {"grouping", tok_grouping, 0},
+ {""},
+#line 45 "locfile-kw.gperf"
+ {"blank", tok_blank, 0},
{""}, {""},
-#line 195 "locfile-kw.gperf"
- {"application", tok_application, 0},
+#line 194 "locfile-kw.gperf"
+ {"language", tok_language, 0},
+#line 120 "locfile-kw.gperf"
+ {"uno_valid_from", tok_uno_valid_from, 0},
{""},
-#line 126 "locfile-kw.gperf"
- {"grouping", tok_grouping, 0},
-#line 78 "locfile-kw.gperf"
- {"elif", tok_elif, 0},
-#line 128 "locfile-kw.gperf"
- {"abday", tok_abday, 0},
+#line 197 "locfile-kw.gperf"
+ {"application", tok_application, 0},
{""},
-#line 196 "locfile-kw.gperf"
- {"abbreviation", tok_abbreviation, 0},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 56 "locfile-kw.gperf"
+#line 80 "locfile-kw.gperf"
+ {"elifndef", tok_elifndef, 0},
+ {""}, {""}, {""}, {""}, {""},
+#line 122 "locfile-kw.gperf"
+ {"duo_valid_from", tok_duo_valid_from, 0},
+#line 57 "locfile-kw.gperf"
{"coll_weight_max", tok_coll_weight_max, 0},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 66 "locfile-kw.gperf"
+ {""},
+#line 79 "locfile-kw.gperf"
+ {"elifdef", tok_elifdef, 0},
+#line 67 "locfile-kw.gperf"
{"backward", tok_backward, 0},
-#line 104 "locfile-kw.gperf"
+#line 106 "locfile-kw.gperf"
{"duo_int_frac_digits", tok_duo_int_frac_digits, 0},
- {""},
-#line 94 "locfile-kw.gperf"
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 96 "locfile-kw.gperf"
{"p_sign_posn", tok_p_sign_posn, 0},
{""},
-#line 199 "locfile-kw.gperf"
+#line 201 "locfile-kw.gperf"
{"category", tok_category, 0},
+ {""}, {""}, {""}, {""},
+#line 134 "locfile-kw.gperf"
+ {"mon", tok_mon, 0},
{""},
-#line 122 "locfile-kw.gperf"
+#line 124 "locfile-kw.gperf"
{"conversion_rate", tok_conversion_rate, 0},
- {""},
-#line 83 "locfile-kw.gperf"
- {"mon_decimal_point", tok_mon_decimal_point, 0},
- {""}, {""}, {""},
-#line 62 "locfile-kw.gperf"
+ {""}, {""}, {""}, {""}, {""},
+#line 63 "locfile-kw.gperf"
{"order_start", tok_order_start, 0},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-#line 188 "locfile-kw.gperf"
+ {""}, {""}, {""}, {""}, {""},
+#line 176 "locfile-kw.gperf"
+ {"lang_ab", tok_lang_ab, 0},
+#line 178 "locfile-kw.gperf"
+ {"lang_lib", tok_lang_lib, 0},
+ {""}, {""}, {""},
+#line 190 "locfile-kw.gperf"
{"contact", tok_contact, 0},
{""}, {""}, {""},
-#line 169 "locfile-kw.gperf"
+#line 171 "locfile-kw.gperf"
{"country_ab3", tok_country_ab3, 0},
- {""}, {""}, {""}, {""},
-#line 168 "locfile-kw.gperf"
- {"country_ab2", tok_country_ab2, 0},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-#line 174 "locfile-kw.gperf"
- {"lang_ab", tok_lang_ab, 0},
-#line 176 "locfile-kw.gperf"
- {"lang_lib", tok_lang_lib, 0},
- {""}, {""}, {""}, {""},
+ {""}, {""}, {""},
#line 191 "locfile-kw.gperf"
+ {"email", tok_email, 0},
+#line 170 "locfile-kw.gperf"
+ {"country_ab2", tok_country_ab2, 0},
+ {""}, {""}, {""},
+#line 55 "locfile-kw.gperf"
+ {"default_missing", tok_default_missing, 0},
+ {""}, {""},
+#line 193 "locfile-kw.gperf"
{"fax", tok_fax, 0},
- {""},
-#line 136 "locfile-kw.gperf"
- {"am_pm", tok_am_pm, 0},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 172 "locfile-kw.gperf"
+ {"country_num", tok_country_num, 0},
+ {""}, {""}, {""}, {""}, {""}, {""},
+#line 51 "locfile-kw.gperf"
+ {"map", tok_map, 0},
+#line 65 "locfile-kw.gperf"
+ {"from", tok_from, 0},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 86 "locfile-kw.gperf"
+ {"mon_thousands_sep", tok_mon_thousands_sep, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""},
-#line 37 "locfile-kw.gperf"
- {"alnum", tok_alnum, 0},
{""}, {""}, {""},
-#line 175 "locfile-kw.gperf"
- {"lang_term", tok_lang_term, 0},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 79 "locfile-kw.gperf"
+#line 81 "locfile-kw.gperf"
{"endif", tok_endif, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 165 "locfile-kw.gperf"
- {"postal_fmt", tok_postal_fmt, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""},
-#line 75 "locfile-kw.gperf"
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 76 "locfile-kw.gperf"
{"undef", tok_undef, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
-#line 58 "locfile-kw.gperf"
- {"collating-element", tok_collating_element, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 59 "locfile-kw.gperf"
+ {"collating-element", tok_collating_element, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""},
-#line 85 "locfile-kw.gperf"
- {"mon_grouping", tok_mon_grouping, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""},
-#line 65 "locfile-kw.gperf"
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 66 "locfile-kw.gperf"
{"forward", tok_forward, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 59 "locfile-kw.gperf"
+ {""}, {""}, {""}, {""}, {""},
+#line 85 "locfile-kw.gperf"
+ {"mon_decimal_point", tok_mon_decimal_point, 0},
+ {""}, {""},
+#line 167 "locfile-kw.gperf"
+ {"postal_fmt", tok_postal_fmt, 0},
+ {""}, {""}, {""}, {""}, {""},
+#line 60 "locfile-kw.gperf"
{"collating-symbol", tok_collating_symbol, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""},
-#line 34 "locfile-kw.gperf"
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 35 "locfile-kw.gperf"
{"alpha", tok_alpha, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""},
+#line 38 "locfile-kw.gperf"
+ {"alnum", tok_alnum, 0},
+ {""},
+#line 87 "locfile-kw.gperf"
+ {"mon_grouping", tok_mon_grouping, 0},
+ {""},
+#line 177 "locfile-kw.gperf"
+ {"lang_term", tok_lang_term, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""}, {""}, {""}, {""},
+#line 77 "locfile-kw.gperf"
+ {"ifdef", tok_ifdef, 0},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
- {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 76 "locfile-kw.gperf"
- {"ifdef", tok_ifdef, 0}
+ {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+ {""}, {""}, {""}, {""},
+#line 138 "locfile-kw.gperf"
+ {"am_pm", tok_am_pm, 0}
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
diff --git a/libc/locale/programs/locfile-token.h b/libc/locale/programs/locfile-token.h
index d6db1a778..aba0c0ef6 100644
--- a/libc/locale/programs/locfile-token.h
+++ b/libc/locale/programs/locfile-token.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996,1997,1998,1999,2000,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2000,2005,2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
@@ -115,7 +115,8 @@ enum token_t
tok_ifdef,
tok_ifndef,
tok_else,
- tok_elif,
+ tok_elifdef,
+ tok_elifndef,
tok_endif,
tok_lc_monetary,
tok_int_curr_symbol,
diff --git a/libc/localedata/ChangeLog b/libc/localedata/ChangeLog
index 89f46cf91..934f5d4ee 100644
--- a/libc/localedata/ChangeLog
+++ b/libc/localedata/ChangeLog
@@ -1,3 +1,31 @@
+2007-10-10 Ulrich Drepper <drepper@redhat.com>
+
+ * locales/iso14651_t1_common: If DIACRIT_FORWARD is defined, define
+ second level of <LATIN> script as forward.
+ * locales/de_DE: Define DIACRIT_FORWARD.
+ * de_DE.in: Revert last change.
+
+2007-10-10 Jakub Jelinek <jakub@redhat.com>
+
+ * locales/en_US: Add first_weekday and first_workday.
+ * locales/cs_CZ: Likewise.
+ * locales/fur_IT: Likewise.
+ * locales/fy_DE: Likewise.
+ * locales/hu_HU: Likewise.
+ * locales/i18n: Likewise.
+ * locales/li_BE: Likewise.
+ * locales/li_NL: Likewise.
+ * locales/nds_DE: Likewise.
+ * locales/nds_NL: Likewise.
+ * locales/pl_PL: Likewise.
+ * locales/sc_IT: Likewise.
+ * locales/sk_SK: Likewise.
+
+2007-10-09 Ulrich Drepper <drepper@redhat.com>
+
+ * locales/de_DE: Set first week day to Monday.
+ * locales/fr_FR: Likewise.
+
2007-10-07 Ulrich Drepper <drepper@redhat.com>
[BZ #73]
diff --git a/libc/localedata/de_DE.in b/libc/localedata/de_DE.in
index b3b0dac29..c56f401f6 100644
--- a/libc/localedata/de_DE.in
+++ b/libc/localedata/de_DE.in
@@ -40,8 +40,8 @@ Füße (pl. of "Fuß") : feet
Fussel : fluff
fusseln : to wear of fluff
füßeln : play footsie [under the table]
-Füssen : Füssen (town)
fußen : to be based [on]
+Füssen : Füssen (town)
Füßen (dat. pl. of "Fuß") : [to the] feet
in Massen : in large numbers
in Maßen : moderately
@@ -49,9 +49,9 @@ Masern : measels
Mass. (Massachusetts) : Massachusetts (state)
Maß : measure
Masse : mass
+Massé : (particular billard stroke)
Maße (pl. of "Maß") : measures
mäße (pres. conj. of "messen") : take measure (e.g. in indirect speech)
-Massé : (particular billard stroke)
Massen- : mass; wholesale; bulk (in compound nouns)
massig : massive
mäßig : moderate; modest
@@ -60,8 +60,8 @@ Miß : Miss
Passe : yoke (of dress)
passé : over, gone
Schlagerforderung : claim, demanded in a pop song
-Schlägerforderung : demand of a hooligan
Schlagerförderung : promotion of pop music
+Schlägerforderung : demand of a hooligan
Schlägerförderung : promotion of hooliganism :-)
Schurz : apron
Schürze : apron
diff --git a/libc/localedata/locales/cs_CZ b/libc/localedata/locales/cs_CZ
index 059776a05..cb2323123 100644
--- a/libc/localedata/locales/cs_CZ
+++ b/libc/localedata/locales/cs_CZ
@@ -2439,6 +2439,8 @@ abmon "<U006C><U0065><U0064>";/
% "<U0044><U0065><U0063>"
week 7;19971201;4
+first_weekday 1
+first_workday 1
d_t_fmt "<U0025><U0061><U00A0><U0025><U002D><U0064><U002E><U00A0><U0025><U0042><U00A0><U0025><U0059><U002C><U00A0><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U00A0><U0025><U005A>"
diff --git a/libc/localedata/locales/de_DE b/libc/localedata/locales/de_DE
index 8c6fe41eb..a694dc288 100644
--- a/libc/localedata/locales/de_DE
+++ b/libc/localedata/locales/de_DE
@@ -76,6 +76,8 @@ END LC_CTYPE
LC_COLLATE
+define DIACRIT_FORWARD
+
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
@@ -118,7 +120,6 @@ day "<U0053><U006F><U006E><U006E><U0074><U0061><U0067>";/
"<U0044><U006F><U006E><U006E><U0065><U0072><U0073><U0074><U0061><U0067>";/
"<U0046><U0072><U0065><U0069><U0074><U0061><U0067>";/
"<U0053><U0061><U006D><U0073><U0074><U0061><U0067>"
-week 7;19971201;4
abmon "<U004A><U0061><U006E>";"<U0046><U0065><U0062>";/
"<U004D><U00E4><U0072>";"<U0041><U0070><U0072>";/
"<U004D><U0061><U0069>";"<U004A><U0075><U006E>";/
@@ -153,6 +154,10 @@ t_fmt_ampm ""
date_fmt "<U0025><U0061><U0020><U0025><U002D><U0064><U002E><U0020>/
<U0025><U0062><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>/
<U0020><U0025><U005A><U0020><U0025><U0059>"
+
+week 7;19971201;4
+first_weekday 1
+first_workday 1
END LC_TIME
LC_MESSAGES
diff --git a/libc/localedata/locales/en_US b/libc/localedata/locales/en_US
index 1a97aa7aa..38425e815 100644
--- a/libc/localedata/locales/en_US
+++ b/libc/localedata/locales/en_US
@@ -82,6 +82,8 @@ day "<U0053><U0075><U006E><U0064><U0061><U0079>";/
"<U0053><U0061><U0074><U0075><U0072><U0064><U0061><U0079>"
week 7;19971130;7
+first_weekday 1
+first_workday 2
abmon "<U004A><U0061><U006E>";"<U0046><U0065><U0062>";/
"<U004D><U0061><U0072>";"<U0041><U0070><U0072>";/
"<U004D><U0061><U0079>";"<U004A><U0075><U006E>";/
diff --git a/libc/localedata/locales/fr_FR b/libc/localedata/locales/fr_FR
index a9845fda1..8bae00565 100644
--- a/libc/localedata/locales/fr_FR
+++ b/libc/localedata/locales/fr_FR
@@ -129,6 +129,10 @@ t_fmt_ampm ""
date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U005A><U0020><U0025><U0059>"
+
+week 7;19971201;4
+first_weekday 1
+first_workday 1
END LC_TIME
LC_PAPER
diff --git a/libc/localedata/locales/fur_IT b/libc/localedata/locales/fur_IT
index f9c4bd3fc..35da38ca9 100644
--- a/libc/localedata/locales/fur_IT
+++ b/libc/localedata/locales/fur_IT
@@ -111,6 +111,8 @@ date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U005A><U0020><U0025><U0059>"
week 7;19971201;4
+first_weekday 1
+first_workday 1
END LC_TIME
LC_PAPER
diff --git a/libc/localedata/locales/fy_DE b/libc/localedata/locales/fy_DE
index ec37f2f77..cad33aa51 100644
--- a/libc/localedata/locales/fy_DE
+++ b/libc/localedata/locales/fy_DE
@@ -128,4 +128,6 @@ t_fmt "<U0025><U0054>"
am_pm "";""
t_fmt_ampm ""
week 7;19971201;4
+first_weekday 1
+first_workday 1
END LC_TIME
diff --git a/libc/localedata/locales/hu_HU b/libc/localedata/locales/hu_HU
index ce878e9d7..95be95b0a 100644
--- a/libc/localedata/locales/hu_HU
+++ b/libc/localedata/locales/hu_HU
@@ -521,6 +521,8 @@ t_fmt_ampm "<U0025><U0048><U002E><U0025><U004D><U002E><U0025><U0053>"
date_fmt "<U0025><U0059><U002E><U0020><U0025><U0062><U002E><U0020><U0025><U0065><U002E><U002C>/
<U0020><U0025><U0041><U002C><U0020><U0025><U0048><U002E><U0025><U004D><U002E><U0025><U0053><U0020><U0025><U005A>"
week 7;19971201;4
+first_weekday 1
+first_workday 1
END LC_TIME
LC_PAPER
diff --git a/libc/localedata/locales/i18n b/libc/localedata/locales/i18n
index ce16afbe0..93ffe90e7 100644
--- a/libc/localedata/locales/i18n
+++ b/libc/localedata/locales/i18n
@@ -1943,6 +1943,8 @@ LC_TIME
abday "<U0031>";"<U0032>";"<U0033>";"<U0034>";"<U0035>";"<U0036>";"<U0037>"
day "<U0031>";"<U0032>";"<U0033>";"<U0034>";"<U0035>";"<U0036>";"<U0037>"
week 7;19971201;4
+first_weekday 1
+first_workday 1
abmon "<U0030><U0031>";"<U0030><U0032>";"<U0030><U0033>";"<U0030><U0034>";/
"<U0030><U0035>";"<U0030><U0036>";"<U0030><U0037>";"<U0030><U0038>";/
"<U0030><U0039>";"<U0031><U0030>";"<U0031><U0031>";"<U0031><U0032>"
diff --git a/libc/localedata/locales/iso14651_t1_common b/libc/localedata/locales/iso14651_t1_common
index 14b290c66..b5951f9e8 100644
--- a/libc/localedata/locales/iso14651_t1_common
+++ b/libc/localedata/locales/iso14651_t1_common
@@ -1121,7 +1121,11 @@ order_start <SPECIAL>;forward;backward;forward;forward,position
<U009E> IGNORE;IGNORE;IGNORE;<U009E>
<U009F> IGNORE;IGNORE;IGNORE;<U009F>
+ifdef DIACRIT_FORWARD
+order_start <LATIN>;forward;forward;forward;forward,position
+else
order_start <LATIN>;forward;backward;forward;forward,position
+endif
#
<U00A0> <U0020>;<BAS>;<MIN>;IGNORE # 170<NBSP>
#
diff --git a/libc/localedata/locales/li_BE b/libc/localedata/locales/li_BE
index 7de99170c..f0a6fc19f 100644
--- a/libc/localedata/locales/li_BE
+++ b/libc/localedata/locales/li_BE
@@ -127,4 +127,6 @@ t_fmt "<U0025><U0054>"
am_pm "";""
t_fmt_ampm ""
week 7;19971201;4
+first_weekday 1
+first_workday 1
END LC_TIME
diff --git a/libc/localedata/locales/li_NL b/libc/localedata/locales/li_NL
index 016e283cd..3f4d021f4 100644
--- a/libc/localedata/locales/li_NL
+++ b/libc/localedata/locales/li_NL
@@ -128,4 +128,6 @@ t_fmt "<U0025><U0054>"
am_pm "";""
t_fmt_ampm ""
week 7;19971201;4
+first_weekday 1
+first_workday 1
END LC_TIME
diff --git a/libc/localedata/locales/nds_DE b/libc/localedata/locales/nds_DE
index 179f05280..10310cf07 100644
--- a/libc/localedata/locales/nds_DE
+++ b/libc/localedata/locales/nds_DE
@@ -126,4 +126,6 @@ t_fmt "<U0025><U0054>"
am_pm "";""
t_fmt_ampm ""
week 7;19971201;4
+first_weekday 1
+first_workday 1
END LC_TIME
diff --git a/libc/localedata/locales/nds_NL b/libc/localedata/locales/nds_NL
index aaccb6845..54792ca65 100644
--- a/libc/localedata/locales/nds_NL
+++ b/libc/localedata/locales/nds_NL
@@ -125,4 +125,6 @@ t_fmt "<U0025><U0054>"
am_pm "";""
t_fmt_ampm ""
week 7;19971201;4
+first_weekday 1
+first_workday 1
END LC_TIME
diff --git a/libc/localedata/locales/pl_PL b/libc/localedata/locales/pl_PL
index 213284f0d..2f17b364f 100644
--- a/libc/localedata/locales/pl_PL
+++ b/libc/localedata/locales/pl_PL
@@ -2199,6 +2199,8 @@ date_fmt "<U0025><U0061><U002C><U0020>/
<U0025><U002D><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U002C><U0020>/
<U0025><U0054><U0020><U0025><U005A>"
week 7;19971201;4
+first_weekday 1
+first_workday 1
END LC_TIME
LC_PAPER
diff --git a/libc/localedata/locales/sc_IT b/libc/localedata/locales/sc_IT
index dd38cac62..0309d56f6 100644
--- a/libc/localedata/locales/sc_IT
+++ b/libc/localedata/locales/sc_IT
@@ -111,6 +111,8 @@ date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U005A><U0020><U0025><U0059>"
week 7;19971201;4
+first_weekday 1
+first_workday 1
END LC_TIME
LC_PAPER
diff --git a/libc/localedata/locales/sk_SK b/libc/localedata/locales/sk_SK
index afcca128b..57e832751 100644
--- a/libc/localedata/locales/sk_SK
+++ b/libc/localedata/locales/sk_SK
@@ -184,6 +184,8 @@ date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
<U0025><U005A><U0020><U0025><U0059>"
week 7;19971201;4
+first_weekday 1
+first_workday 1
END LC_TIME
diff --git a/libc/nptl/ChangeLog b/libc/nptl/ChangeLog
index 5d11b6ab7..b7c03dc33 100644
--- a/libc/nptl/ChangeLog
+++ b/libc/nptl/ChangeLog
@@ -1,3 +1,11 @@
+2007-10-10 Jakub Jelinek <jakub@redhat.com>
+
+ * sysdeps/pthread/bits/libc-lock.h (__libc_rwlock_init): Inside of
+ libc.so just clear NAME.
+ (__libc_rwlock_fini): Nop inside of libc.so.
+ * tst-initializers1.c (main): Test if PTHREAD_RWLOCK_INITIALIZER is
+ all zeros.
+
2007-09-02 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
diff --git a/libc/nptl/sysdeps/pthread/bits/libc-lock.h b/libc/nptl/sysdeps/pthread/bits/libc-lock.h
index 45eba0613..a597f3b5a 100644
--- a/libc/nptl/sysdeps/pthread/bits/libc-lock.h
+++ b/libc/nptl/sysdeps/pthread/bits/libc-lock.h
@@ -172,8 +172,15 @@ typedef pthread_key_t __libc_key_t;
# define __libc_lock_init(NAME) \
__libc_maybe_call (__pthread_mutex_init, (&(NAME), NULL), 0)
#endif
-#define __libc_rwlock_init(NAME) \
+#if defined SHARED && !defined NOT_IN_libc
+/* ((NAME) = (__libc_rwlock_t) PTHREAD_RWLOCK_INITIALIZER, 0) is
+ inefficient. */
+# define __libc_rwlock_init(NAME) \
+ (__builtin_memset (&(NAME), '\0', sizeof (NAME)), 0)
+#else
+# define __libc_rwlock_init(NAME) \
__libc_maybe_call (__pthread_rwlock_init, (&(NAME), NULL), 0)
+#endif
/* Same as last but this time we initialize a recursive mutex. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
@@ -214,8 +221,12 @@ typedef pthread_key_t __libc_key_t;
# define __libc_lock_fini(NAME) \
__libc_maybe_call (__pthread_mutex_destroy, (&(NAME)), 0)
#endif
-#define __libc_rwlock_fini(NAME) \
+#if defined SHARED && !defined NOT_IN_libc
+# define __libc_rwlock_fini(NAME) ((void) 0)
+#else
+# define __libc_rwlock_fini(NAME) \
__libc_maybe_call (__pthread_rwlock_destroy, (&(NAME)), 0)
+#endif
/* Finalize recursive named lock. */
#if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread)
diff --git a/libc/nptl/tst-initializers1.c b/libc/nptl/tst-initializers1.c
index 9036e6eac..d30e885e0 100644
--- a/libc/nptl/tst-initializers1.c
+++ b/libc/nptl/tst-initializers1.c
@@ -47,5 +47,12 @@ main (void)
if (rwl_writer.__data.__flags
!= PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP)
return 6;
+ /* <bits/libc-lock.h> __libc_rwlock_init definition for libc.so
+ relies on PTHREAD_RWLOCK_INITIALIZER being all zeros. If
+ that ever changes, <bits/libc-lock.h> needs updating. */
+ size_t i;
+ for (i = 0; i < sizeof (rwl_normal); i++)
+ if (((char *) &rwl_normal)[i] != '\0')
+ return 7;
return 0;
}
diff --git a/libc/stdio-common/printf-parse.h b/libc/stdio-common/printf-parse.h
index aa49c7a64..f6ad71cd3 100644
--- a/libc/stdio-common/printf-parse.h
+++ b/libc/stdio-common/printf-parse.h
@@ -1,5 +1,6 @@
/* Internal header for parsing printf format strings.
- Copyright (C) 1995-1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1995-1999, 2000, 2002, 2003, 2007
+ Free Software Foundation, Inc.
This file is part of th GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -20,6 +21,8 @@
#include <printf.h>
#include <stdint.h>
#include <stddef.h>
+#include <string.h>
+#include <wchar.h>
struct printf_spec
@@ -86,11 +89,17 @@ extern printf_function **__printf_function_table attribute_hidden;
/* Find the next spec in FORMAT, or the end of the string. Returns
a pointer into FORMAT, to a '%' or a '\0'. */
-extern const unsigned char *__find_specmb (const UCHAR_T *format,
- mbstate_t *ps) attribute_hidden;
+__extern_always_inline const unsigned char *
+__find_specmb (const unsigned char *format)
+{
+ return (const unsigned char *) __strchrnul ((const char *) format, '%');
+}
-extern const unsigned int *__find_specwc (const UCHAR_T *format)
- attribute_hidden;
+__extern_always_inline const unsigned int *
+__find_specwc (const unsigned int *format)
+{
+ return (const unsigned int *) __wcschrnul ((const wchar_t *) format, L'%');
+}
/* FORMAT must point to a '%' at the beginning of a spec. Fills in *SPEC
@@ -100,8 +109,7 @@ extern const unsigned int *__find_specwc (const UCHAR_T *format)
remains the highest argument index used. */
extern size_t __parse_one_specmb (const unsigned char *format, size_t posn,
struct printf_spec *spec,
- size_t *max_ref_arg, mbstate_t *ps)
- attribute_hidden;
+ size_t *max_ref_arg) attribute_hidden;
extern size_t __parse_one_specwc (const unsigned int *format, size_t posn,
struct printf_spec *spec,
diff --git a/libc/stdio-common/printf-parsemb.c b/libc/stdio-common/printf-parsemb.c
index 2f21fc636..da6fd3edb 100644
--- a/libc/stdio-common/printf-parsemb.c
+++ b/libc/stdio-common/printf-parsemb.c
@@ -46,35 +46,6 @@
-/* Find the next spec in FORMAT, or the end of the string. Returns
- a pointer into FORMAT, to a '%' or a '\0'. */
-const UCHAR_T *
-#ifdef COMPILE_WPRINTF
-__find_specwc (const UCHAR_T *format)
-#else
-__find_specmb (const UCHAR_T *format, mbstate_t *ps)
-#endif
-{
-#ifdef COMPILE_WPRINTF
- return (const UCHAR_T *) __wcschrnul ((const CHAR_T *) format, L'%');
-#else
- while (*format != L_('\0') && *format != L_('%'))
- {
- int len;
-
- /* Remove any hints of a wrong encoding. */
- ps->__count = 0;
- if (! isascii (*format)
- && (len = __mbrlen ((const CHAR_T *) format, MB_CUR_MAX, ps)) > 0)
- format += len;
- else
- ++format;
- }
- return format;
-#endif
-}
-
-
/* FORMAT must point to a '%' at the beginning of a spec. Fills in *SPEC
with the parsed details. POSN is the number of arguments already
consumed. At most MAXTYPES - POSN types are filled in TYPES. Return
@@ -87,8 +58,7 @@ __parse_one_specwc (const UCHAR_T *format, size_t posn,
struct printf_spec *spec, size_t *max_ref_arg)
#else
__parse_one_specmb (const UCHAR_T *format, size_t posn,
- struct printf_spec *spec, size_t *max_ref_arg,
- mbstate_t *ps)
+ struct printf_spec *spec, size_t *max_ref_arg)
#endif
{
unsigned int n;
@@ -403,7 +373,7 @@ __parse_one_specmb (const UCHAR_T *format, size_t posn,
#ifdef COMPILE_WPRINTF
spec->next_fmt = __find_specwc (format);
#else
- spec->next_fmt = __find_specmb (format, ps);
+ spec->next_fmt = __find_specmb (format);
#endif
}
diff --git a/libc/stdio-common/printf-prs.c b/libc/stdio-common/printf-prs.c
index 015b01f1e..aabc9ed85 100644
--- a/libc/stdio-common/printf-prs.c
+++ b/libc/stdio-common/printf-prs.c
@@ -1,5 +1,5 @@
-/* Copyright (C) 1991, 1992, 1995, 1996, 1999, 2000, 2002, 2003, 2004, 2005
- Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1992, 1995, 1996, 1999, 2000, 2002, 2003, 2004, 2005,
+ 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -66,17 +66,16 @@ parse_printf_format (fmt, n, argtypes)
size_t nargs; /* Number of arguments. */
size_t max_ref_arg; /* Highest index used in a positional arg. */
struct printf_spec spec;
- mbstate_t mbstate;
const unsigned char *f = (const unsigned char *) fmt;
nargs = 0;
max_ref_arg = 0;
/* Search for format specifications. */
- for (f = __find_specmb (f, &mbstate); *f != '\0'; f = spec.next_fmt)
+ for (f = __find_specmb (f); *f != '\0'; f = spec.next_fmt)
{
/* Parse this spec. */
- nargs += __parse_one_specmb (f, nargs, &spec, &max_ref_arg, &mbstate);
+ nargs += __parse_one_specmb (f, nargs, &spec, &max_ref_arg);
/* If the width is determined by an argument this is an int. */
if (spec.width_arg != -1 && (size_t) spec.width_arg < n)
diff --git a/libc/stdio-common/vfprintf.c b/libc/stdio-common/vfprintf.c
index fae0f7464..d1dc1aaf5 100644
--- a/libc/stdio-common/vfprintf.c
+++ b/libc/stdio-common/vfprintf.c
@@ -209,11 +209,6 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
CHAR_T *workstart = NULL;
CHAR_T *workend;
- /* State for restartable multibyte character handling functions. */
-#ifndef COMPILE_WPRINTF
- mbstate_t mbstate;
-#endif
-
/* We have to save the original argument pointer. */
va_list ap_save;
@@ -1294,11 +1289,8 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
/* Find the first format specifier. */
f = lead_str_end = __find_specwc ((const UCHAR_T *) format);
#else
- /* Put state for processing format string in initial state. */
- memset (&mbstate, '\0', sizeof (mbstate_t));
-
/* Find the first format specifier. */
- f = lead_str_end = __find_specmb ((const UCHAR_T *) format, &mbstate);
+ f = lead_str_end = __find_specmb ((const UCHAR_T *) format);
#endif
/* Lock stream. */
@@ -1591,7 +1583,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
#ifdef COMPILE_WPRINTF
f = __find_specwc ((end_of_spec = ++f));
#else
- f = __find_specmb ((end_of_spec = ++f), &mbstate);
+ f = __find_specmb ((end_of_spec = ++f));
#endif
/* Write the following constant string. */
@@ -1674,8 +1666,7 @@ do_positional:
#ifdef COMPILE_WPRINTF
nargs += __parse_one_specwc (f, nargs, &specs[nspecs], &max_ref_arg);
#else
- nargs += __parse_one_specmb (f, nargs, &specs[nspecs], &max_ref_arg,
- &mbstate);
+ nargs += __parse_one_specmb (f, nargs, &specs[nspecs], &max_ref_arg);
#endif
}
diff --git a/libc/sysdeps/unix/sysv/linux/eventfd_read.c b/libc/sysdeps/unix/sysv/linux/eventfd_read.c
index 1113f1147..3b1059a0a 100644
--- a/libc/sysdeps/unix/sysv/linux/eventfd_read.c
+++ b/libc/sysdeps/unix/sysv/linux/eventfd_read.c
@@ -24,5 +24,5 @@
int
eventfd_read (int fd, eventfd_t *value)
{
- return read (fd, value, sizeof (eventfd_t)) != sizeof (eventfd_t) ? -1 : 0;
+ return __read (fd, value, sizeof (eventfd_t)) != sizeof (eventfd_t) ? -1 : 0;
}
diff --git a/libc/sysdeps/unix/sysv/linux/eventfd_write.c b/libc/sysdeps/unix/sysv/linux/eventfd_write.c
index 4bcf95dae..4b15990c3 100644
--- a/libc/sysdeps/unix/sysv/linux/eventfd_write.c
+++ b/libc/sysdeps/unix/sysv/linux/eventfd_write.c
@@ -24,5 +24,6 @@
int
eventfd_write (int fd, eventfd_t value)
{
- return write (fd, &value, sizeof (eventfd_t)) != sizeof (eventfd_t) ? -1 : 0;
+ return __write (fd, &value,
+ sizeof (eventfd_t)) != sizeof (eventfd_t) ? -1 : 0;
}
diff --git a/libc/sysdeps/x86_64/cacheinfo.c b/libc/sysdeps/x86_64/cacheinfo.c
index 5b92bd584..12102fea8 100644
--- a/libc/sysdeps/x86_64/cacheinfo.c
+++ b/libc/sysdeps/x86_64/cacheinfo.c
@@ -456,6 +456,13 @@ init_cacheinfo (void)
asm volatile ("cpuid"
: "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
: "0" (4), "2" (i++));
+
+ /* There seems to be a bug in at least some Pentium Ds
+ which sometimes fail to iterate all cache parameters.
+ Do not loop indefinitely here, stop in this case and
+ assume there is no such information. */
+ if ((eax & 0x1f) == 0)
+ goto intel_bug_no_cache_info;
}
while (((eax >> 5) & 0x7) != level);
@@ -463,6 +470,7 @@ init_cacheinfo (void)
}
else
{
+ intel_bug_no_cache_info:
/* Assume that all logical threads share the highest cache level. */
asm volatile ("cpuid"
: "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)