aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog30
-rw-r--r--inet/getnetgrent_r.c6
-rw-r--r--locale/programs/charmap-dir.c10
-rw-r--r--locale/programs/charmap.c26
-rw-r--r--locale/programs/ld-address.c87
-rw-r--r--locale/programs/ld-collate.c56
-rw-r--r--locale/programs/ld-ctype.c230
-rw-r--r--locale/programs/ld-identification.c16
-rw-r--r--locale/programs/ld-measurement.c15
-rw-r--r--locale/programs/ld-messages.c30
-rw-r--r--locale/programs/ld-monetary.c44
-rw-r--r--locale/programs/ld-name.c21
-rw-r--r--locale/programs/ld-numeric.c19
-rw-r--r--locale/programs/ld-paper.c12
-rw-r--r--locale/programs/ld-telephone.c27
-rw-r--r--locale/programs/ld-time.c101
-rw-r--r--locale/programs/linereader.c10
-rw-r--r--locale/programs/linereader.h4
-rw-r--r--locale/programs/localedef.c35
-rw-r--r--locale/programs/localedef.h14
-rw-r--r--locale/programs/locfile.c16
-rw-r--r--locale/programs/repertoire.c12
22 files changed, 453 insertions, 368 deletions
diff --git a/ChangeLog b/ChangeLog
index 6492b83220..de582c5bc5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,35 @@
2002-02-05 Ulrich Drepper <drepper@redhat.com>
+ * inet/getnetgrent_r.c (innetgr): Add int* parameter to getfct
+ definition and pass &errno in use of this variable.
+ Reported by Simon Wilkinson <simon@sxw.org.uk> [PR libc/2911].
+
+2002-02-04 Andreas Schwab <schwab@suse.de>
+
+ * locale/programs/localedef.h (WITH_CUR_LOCALE): Define.
+ * locale/programs/charmap-dir.c: Wrap calls that output messages
+ with WITH_CUR_LOCALE. Include "localedef.h" first.
+ * locale/programs/charmap.c: Likewise.
+ * locale/programs/ld-address.c: Likewise.
+ * locale/programs/ld-collate.c: Likewise.
+ * locale/programs/ld-ctype.c: Likewise.
+ * locale/programs/ld-identification.c: Likewise.
+ * locale/programs/ld-measurement.c: Likewise.
+ * locale/programs/ld-messages.c: Likewise.
+ * locale/programs/ld-monetary.c: Likewise.
+ * locale/programs/ld-name.c: Likewise.
+ * locale/programs/ld-numeric.c: Likewise.
+ * locale/programs/ld-paper.c: Likewise.
+ * locale/programs/ld-telephone.c: Likewise.
+ * locale/programs/ld-time.c: Likewise.
+ * locale/programs/linereader.c: Likewise.
+ * locale/programs/linereader.h: Likewise.
+ * locale/programs/localedef.c: Likewise.
+ * locale/programs/locfile.c: Likewise.
+ * locale/programs/repertoire.c: Likewise.
+
+2002-02-05 Ulrich Drepper <drepper@redhat.com>
+
* elf/rtld.c (_dl_start_final): Determine load address to locate
ehdr with GL(dl_rtld_map).l_map_start.
diff --git a/inet/getnetgrent_r.c b/inet/getnetgrent_r.c
index 4c3a1cadfe..ba1019c1f8 100644
--- a/inet/getnetgrent_r.c
+++ b/inet/getnetgrent_r.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998, 1999, 2002 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
@@ -298,7 +298,7 @@ innetgr (const char *netgroup, const char *host, const char *user,
{
int (*setfct) (const char *, struct __netgrent *);
void (*endfct) (struct __netgrent *);
- int (*getfct) (struct __netgrent *, char *, size_t);
+ int (*getfct) (struct __netgrent *, char *, size_t, int *);
struct name_list *known = NULL;
struct name_list *needed = NULL;
int result = 0;
@@ -328,7 +328,7 @@ innetgr (const char *netgroup, const char *host, const char *user,
{
char buffer[1024];
- while ((*getfct) (&entry, buffer, sizeof buffer)
+ while ((*getfct) (&entry, buffer, sizeof buffer, &errno)
== NSS_STATUS_SUCCESS)
{
if (entry.type == group_val)
diff --git a/locale/programs/charmap-dir.c b/locale/programs/charmap-dir.c
index 14cf765632..a7a453552b 100644
--- a/locale/programs/charmap-dir.c
+++ b/locale/programs/charmap-dir.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000,2001 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001, 2002 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
@@ -28,11 +28,9 @@
#include <unistd.h>
#include <sys/stat.h>
+#include "localedef.h"
#include "charmap-dir.h"
-extern void *xmalloc (size_t n);
-extern void *xrealloc (void *p, size_t n);
-
/* The data type of a charmap directory being traversed. */
struct charmap_dir
{
@@ -58,8 +56,8 @@ charmap_opendir (const char *directory)
dir = opendir (directory);
if (dir == NULL)
{
- error (1, errno, gettext ("cannot read character map directory `%s'"),
- directory);
+ WITH_CUR_LOCALE (error (1, errno, gettext ("\
+cannot read character map directory `%s'"), directory));
return NULL;
}
diff --git a/locale/programs/charmap.c b/locale/programs/charmap.c
index 815a28d419..ee755ba50a 100644
--- a/locale/programs/charmap.c
+++ b/locale/programs/charmap.c
@@ -29,8 +29,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <error.h>
-#include "error.h"
+#include "localedef.h"
#include "linereader.h"
#include "charmap.h"
#include "charmap-dir.h"
@@ -43,8 +44,6 @@
#include "charmap-kw.h"
-extern void *xmalloc (size_t __n);
-
/* Prototypes for local functions. */
static struct charmap_t *parse_charmap (struct linereader *cmfile,
int verbose, int be_quiet);
@@ -133,7 +132,8 @@ charmap_read (const char *filename, int verbose, int be_quiet, int use_default)
result = parse_charmap (cmfile, verbose, be_quiet);
if (result == NULL && !be_quiet)
- error (0, errno, _("character map file `%s' not found"), filename);
+ WITH_CUR_LOCALE (error (0, errno, _("\
+character map file `%s' not found"), filename));
}
}
@@ -190,8 +190,8 @@ charmap_read (const char *filename, int verbose, int be_quiet, int use_default)
result = parse_charmap (cmfile, verbose, be_quiet);
if (result == NULL)
- error (4, errno, _("default character map file `%s' not found"),
- DEFAULT_CHARMAP);
+ WITH_CUR_LOCALE (error (4, errno, _("\
+default character map file `%s' not found"), DEFAULT_CHARMAP));
}
/* Test of ASCII compatibility of locale encoding.
@@ -247,9 +247,9 @@ charmap_read (const char *filename, int verbose, int be_quiet, int use_default)
while (*p++ != '\0');
if (failed)
- fprintf (stderr, _("\
+ WITH_CUR_LOCALE (fprintf (stderr, _("\
character map `%s' is not ASCII compatible, locale not ISO C compliant\n"),
- result->code_set_name);
+ result->code_set_name));
}
return result;
@@ -324,9 +324,9 @@ parse_charmap (struct linereader *cmfile, int verbose, int be_quiet)
if (result->mb_cur_min > result->mb_cur_max)
{
if (!be_quiet)
- error (0, 0, _("\
+ WITH_CUR_LOCALE (error (0, 0, _("\
%s: <mb_cur_max> must be greater than <mb_cur_min>\n"),
- cmfile->fname);
+ cmfile->fname));
result->mb_cur_min = result->mb_cur_max;
}
@@ -829,14 +829,16 @@ only WIDTH definitions are allowed to follow the CHARMAP definition"));
continue;
default:
- error (5, 0, _("%s: error in state machine"), __FILE__);
+ WITH_CUR_LOCALE (error (5, 0, _("%s: error in state machine"),
+ __FILE__));
/* NOTREACHED */
}
break;
}
if (state != 91 && !be_quiet)
- error (0, 0, _("%s: premature end of file"), cmfile->fname);
+ WITH_CUR_LOCALE (error (0, 0, _("%s: premature end of file"),
+ cmfile->fname));
lr_close (cmfile);
diff --git a/locale/programs/ld-address.c b/locale/programs/ld-address.c
index adf6bbeb28..52b91cfc28 100644
--- a/locale/programs/ld-address.c
+++ b/locale/programs/ld-address.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -29,6 +29,7 @@
#include <assert.h>
+#include "localedef.h"
#include "localeinfo.h"
#include "locfile.h"
@@ -128,8 +129,8 @@ address_finish (struct localedef_t *locale, const struct charmap_t *charmap)
if (address == NULL)
{
if (! be_quiet)
- error (0, 0, _("No definition for %s category found"),
- "LC_ADDRESS");
+ WITH_CUR_LOCALE (error (0, 0, _("\
+No definition for %s category found"), "LC_ADDRESS"));
address_startup (NULL, locale, 0);
address = locale->categories[LC_ADDRESS].address;
nothing = 1;
@@ -139,8 +140,8 @@ address_finish (struct localedef_t *locale, const struct charmap_t *charmap)
if (address->postal_fmt == NULL)
{
if (! nothing)
- error (0, 0, _("%s: field `%s' not defined"),
- "LC_ADDRESS", "postal_fmt");
+ WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"),
+ "LC_ADDRESS", "postal_fmt"));
/* Use as the default value the value of the i18n locale. */
address->postal_fmt = "%a%N%f%N%d%N%b%N%s %h %e %r%N%C-%z %T%N%c%N";
}
@@ -151,8 +152,8 @@ address_finish (struct localedef_t *locale, const struct charmap_t *charmap)
const char *cp = address->postal_fmt;
if (*cp == '\0')
- error (0, 0, _("%s: field `%s' must not be empty"),
- "LC_ADDRESS", "postal_fmt");
+ WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' must not be empty"),
+ "LC_ADDRESS", "postal_fmt"));
else
while (*cp != '\0')
{
@@ -163,9 +164,9 @@ address_finish (struct localedef_t *locale, const struct charmap_t *charmap)
++cp;
if (strchr ("afdbshNtreCzTSc%", *cp) == NULL)
{
- error (0, 0, _("\
+ WITH_CUR_LOCALE (error (0, 0, _("\
%s: invalid escape `%%%c' sequence in field `%s'"),
- "LC_ADDRESS", *cp, "postal_fmt");
+ "LC_ADDRESS", *cp, "postal_fmt"));
break;
}
}
@@ -177,7 +178,8 @@ address_finish (struct localedef_t *locale, const struct charmap_t *charmap)
if (address->cat == NULL) \
{ \
if (verbose && ! nothing) \
- error (0, 0, _("%s: field `%s' not defined"), "LC_ADDRESS", #cat); \
+ WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"), \
+ "LC_ADDRESS", #cat)); \
address->cat = ""; \
}
@@ -194,16 +196,16 @@ address_finish (struct localedef_t *locale, const struct charmap_t *charmap)
if (address->lang_term == NULL)
{
if (verbose && ! nothing)
- error (0, 0, _("%s: field `%s' not defined"), "LC_ADDRESS",
- "lang_term");
+ WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"),
+ "LC_ADDRESS", "lang_term"));
address->lang_term = "";
cnt = sizeof (iso639) / sizeof (iso639[0]);
}
else if (address->lang_term[0] == '\0')
{
if (verbose)
- error (0, 0, _("%s: field `%s' must not be empty"),
- "LC_ADDRESS", "lang_term");
+ WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' must not be empty"),
+ "LC_ADDRESS", "lang_term"));
cnt = sizeof (iso639) / sizeof (iso639[0]);
}
else
@@ -213,22 +215,23 @@ address_finish (struct localedef_t *locale, const struct charmap_t *charmap)
if (strcmp (address->lang_term, iso639[cnt].term) == 0)
break;
if (cnt == sizeof (iso639) / sizeof (iso639[0]))
- error (0, 0, _("\
+ WITH_CUR_LOCALE (error (0, 0, _("\
%s: terminology language code `%s' not defined"),
- "LC_ADDRESS", address->lang_term);
+ "LC_ADDRESS", address->lang_term));
}
if (address->lang_ab == NULL)
{
if (verbose && ! nothing)
- error (0, 0, _("%s: field `%s' not defined"), "LC_ADDRESS", "lang_ab");
+ WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"),
+ "LC_ADDRESS", "lang_ab"));
address->lang_ab = "";
}
else if (address->lang_ab[0] == '\0')
{
if (verbose)
- error (0, 0, _("%s: field `%s' must not be empty"),
- "LC_ADDRESS", "lang_ab");
+ WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' must not be empty"),
+ "LC_ADDRESS", "lang_ab"));
}
else
{
@@ -239,15 +242,15 @@ address_finish (struct localedef_t *locale, const struct charmap_t *charmap)
if (strcmp (address->lang_ab, iso639[cnt].ab) == 0)
break;
if (cnt == sizeof (iso639) / sizeof (iso639[0]))
- error (0, 0, _("\
+ WITH_CUR_LOCALE (error (0, 0, _("\
%s: language abbreviation `%s' not defined"),
- "LC_ADDRESS", address->lang_ab);
+ "LC_ADDRESS", address->lang_ab));
}
else
if (strcmp (iso639[cnt].ab, address->lang_ab) != 0)
- error (0, 0, _("\
+ WITH_CUR_LOCALE (error (0, 0, _("\
%s: `%s' value does not match `%s' value"),
- "LC_ADDRESS", "lang_ab", "lang_term");
+ "LC_ADDRESS", "lang_ab", "lang_term"));
}
if (address->lang_lib == NULL)
@@ -256,8 +259,8 @@ address_finish (struct localedef_t *locale, const struct charmap_t *charmap)
else if (address->lang_lib[0] == '\0')
{
if (verbose)
- error (0, 0, _("%s: field `%s' must not be empty"),
- "LC_ADDRESS", "lang_lib");
+ WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' must not be empty"),
+ "LC_ADDRESS", "lang_lib"));
}
else
{
@@ -267,22 +270,22 @@ address_finish (struct localedef_t *locale, const struct charmap_t *charmap)
if (strcmp (address->lang_lib, iso639[cnt].lib) == 0)
break;
if (cnt == sizeof (iso639) / sizeof (iso639[0]))
- error (0, 0, _("\
+ WITH_CUR_LOCALE (error (0, 0, _("\
%s: language abbreviation `%s' not defined"),
- "LC_ADDRESS", address->lang_lib);
+ "LC_ADDRESS", address->lang_lib));
}
else
if (strcmp (iso639[cnt].ab, address->lang_ab) != 0)
- error (0, 0, _("\
+ WITH_CUR_LOCALE (error (0, 0, _("\
%s: `%s' value does not match `%s' value"), "LC_ADDRESS", "lang_lib",
- helper == 1 ? "lang_term" : "lang_ab");
+ helper == 1 ? "lang_term" : "lang_ab"));
}
if (address->country_num == 0)
{
if (verbose && ! nothing)
- error (0, 0, _("%s: field `%s' not defined"),
- "LC_ADDRESS", "country_num");
+ WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"),
+ "LC_ADDRESS", "country_num"));
cnt = sizeof (iso3166) / sizeof (iso3166[0]);
}
else
@@ -292,34 +295,36 @@ address_finish (struct localedef_t *locale, const struct charmap_t *charmap)
break;
if (cnt == sizeof (iso3166) / sizeof (iso3166[0]))
- error (0, 0, _("\
+ WITH_CUR_LOCALE (error (0, 0, _("\
%s: numeric country code `%d' not valid"),
- "LC_ADDRESS", address->country_num);
+ "LC_ADDRESS", address->country_num));
}
if (address->country_ab2 == NULL)
{
if (verbose && ! nothing)
- error (0, 0, _("%s: field `%s' not defined"),
- "LC_ADDRESS", "country_ab2");
+ WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"),
+ "LC_ADDRESS", "country_ab2"));
address->country_ab2 = " ";
}
else if (cnt != sizeof (iso3166) / sizeof (iso3166[0])
&& strcmp (address->country_ab2, iso3166[cnt].ab2) != 0)
- error (0, 0, _("%s: `%s' value does not match `%s' value"),
- "LC_ADDRESS", "country_ab2", "country_num");
+ WITH_CUR_LOCALE (error (0, 0,
+ _("%s: `%s' value does not match `%s' value"),
+ "LC_ADDRESS", "country_ab2", "country_num"));
if (address->country_ab3 == NULL)
{
if (verbose && ! nothing)
- error (0, 0, _("%s: field `%s' not defined"),
- "LC_ADDRESS", "country_ab3");
+ WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"),
+ "LC_ADDRESS", "country_ab3"));
address->country_ab3 = " ";
}
else if (cnt != sizeof (iso3166) / sizeof (iso3166[0])
&& strcmp (address->country_ab3, iso3166[cnt].ab3) != 0)
- error (0, 0, _("%s: `%s' value does not match `%s' value"),
- "LC_ADDRESS", "country_ab3", "country_num");
+ WITH_CUR_LOCALE (error (0, 0, _("\
+%s: `%s' value does not match `%s' value"),
+ "LC_ADDRESS", "country_ab3", "country_num"));
}
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index 0da1261bd8..b9ea186d31 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -27,11 +27,11 @@
#include <wchar.h>
#include <sys/param.h>
+#include "localedef.h"
#include "charmap.h"
#include "localeinfo.h"
#include "linereader.h"
#include "locfile.h"
-#include "localedef.h"
#include "elem-hash.h"
/* Uncomment the following line in the production version. */
@@ -1516,7 +1516,8 @@ collate_finish (struct localedef_t *locale, const struct charmap_t *charmap)
{
/* No data, no check. */
if (! be_quiet)
- error (0, 0, _("No definition for %s category found"), "LC_COLLATE");
+ WITH_CUR_LOCALE (error (0, 0, _("No definition for %s category found"),
+ "LC_COLLATE"));
return;
}
@@ -1531,9 +1532,9 @@ collate_finish (struct localedef_t *locale, const struct charmap_t *charmap)
&& ((sect->rules[i] & sort_position)
!= (collate->sections->rules[i] & sort_position)))
{
- error (0, 0, _("\
+ WITH_CUR_LOCALE (error (0, 0, _("\
%s: `position' must be used for a specific level in all sections or none"),
- "LC_COLLATE");
+ "LC_COLLATE"));
break;
}
@@ -1554,9 +1555,10 @@ collate_finish (struct localedef_t *locale, const struct charmap_t *charmap)
{
if (runp->weights[i].w[j]->weights == NULL)
{
- error_at_line (0, 0, runp->file, runp->line,
- _("symbol `%s' not defined"),
- runp->weights[i].w[j]->name);
+ WITH_CUR_LOCALE (error_at_line (0, 0, runp->file,
+ runp->line,
+ _("symbol `%s' not defined"),
+ runp->weights[i].w[j]->name));
need_undefined = 1;
runp->weights[i].w[j] = &collate->undefined;
@@ -1629,11 +1631,14 @@ collate_finish (struct localedef_t *locale, const struct charmap_t *charmap)
/* This should not happen. It means that we have
to symbols with the same byte sequence. It is
of course an error. */
- error_at_line (0, 0, (*eptr)->file, (*eptr)->line,
- _("symbol `%s' has the same encoding as"),
- (*eptr)->name);
- error_at_line (0, 0, runp->file, runp->line,
- _("symbol `%s'"), runp->name);
+ WITH_CUR_LOCALE (error_at_line (0, 0, (*eptr)->file,
+ (*eptr)->line,
+ _("\
+symbol `%s' has the same encoding as"), (*eptr)->name);
+ error_at_line (0, 0, runp->file,
+ runp->line,
+ _("symbol `%s'"),
+ runp->name));
goto dont_insert;
}
else if (c < 0)
@@ -1732,11 +1737,14 @@ collate_finish (struct localedef_t *locale, const struct charmap_t *charmap)
/* This should not happen. It means that we have
two symbols with the same byte sequence. It is
of course an error. */
- error_at_line (0, 0, (*eptr)->file, (*eptr)->line,
- _("symbol `%s' has the same encoding as"),
- (*eptr)->name);
- error_at_line (0, 0, runp->file, runp->line,
- _("symbol `%s'"), runp->name);
+ WITH_CUR_LOCALE (error_at_line (0, 0, (*eptr)->file,
+ (*eptr)->line,
+ _("\
+symbol `%s' has the same encoding as"), (*eptr)->name);
+ error_at_line (0, 0, runp->file,
+ runp->line,
+ _("symbol `%s'"),
+ runp->name));
goto dont_insertwc;
}
else if (c < 0)
@@ -1777,7 +1785,7 @@ collate_finish (struct localedef_t *locale, const struct charmap_t *charmap)
/* This seems not to be enforced by recent standards. Don't
emit an error, simply append UNDEFINED at the end. */
if (0)
- error (0, 0, _("no definition of `UNDEFINED'"));
+ WITH_CUR_LOCALE (error (0, 0, _("no definition of `UNDEFINED'")));
/* Add UNDEFINED at the end. */
collate->undefined.mborder =
@@ -3389,8 +3397,8 @@ error while adding equivalent collating symbol"));
}
else if (state == 3)
{
- error (0, 0, _("%s: missing `reorder-end' keyword"),
- "LC_COLLATE");
+ WITH_CUR_LOCALE (error (0, 0, _("\
+%s: missing `reorder-end' keyword"), "LC_COLLATE"));
state = 4;
}
else if (state != 2 && state != 4)
@@ -3739,11 +3747,11 @@ error while adding equivalent coll