aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog58
-rw-r--r--locale/programs/charmap-dir.c6
-rw-r--r--locale/programs/charmap.c35
-rw-r--r--locale/programs/ld-address.c90
-rw-r--r--locale/programs/ld-collate.c64
-rw-r--r--locale/programs/ld-ctype.c258
-rw-r--r--locale/programs/ld-identification.c24
-rw-r--r--locale/programs/ld-measurement.c14
-rw-r--r--locale/programs/ld-messages.c35
-rw-r--r--locale/programs/ld-monetary.c59
-rw-r--r--locale/programs/ld-name.c20
-rw-r--r--locale/programs/ld-numeric.c23
-rw-r--r--locale/programs/ld-paper.c14
-rw-r--r--locale/programs/ld-telephone.c26
-rw-r--r--locale/programs/ld-time.c97
-rw-r--r--locale/programs/linereader.h26
-rw-r--r--locale/programs/locale.c6
-rw-r--r--locale/programs/localedef.c62
-rw-r--r--locale/programs/localedef.h18
-rw-r--r--locale/programs/locarchive.c4
-rw-r--r--locale/programs/locfile.c15
-rw-r--r--locale/programs/record-status.h227
-rw-r--r--locale/programs/repertoire.c11
-rw-r--r--localedata/gen-locale.sh26
-rwxr-xr-xlocaledata/tst-fmon.sh19
-rwxr-xr-xlocaledata/tst-locale.sh19
26 files changed, 767 insertions, 489 deletions
diff --git a/ChangeLog b/ChangeLog
index d0bc31749e..fd3fe787df 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,61 @@
+2017-10-13 Carlos O'Donell <carlos@redhat.com>
+
+ [BZ #22292]
+ * locale/programs/record-status.h: New file
+ * locale/programs/locale.c: Add comment.
+ * locale/programs/charmap-dir.c: Don't include error.h.
+ (charmap_opendir): Use record_error.
+ * locale/programs/charmap.c: Don't include error.h.
+ (charmap_read): Use record_error, and record_warning.
+ (parse_charmap): Likewise.
+ * locale/programs/ld-address.c: Don't include error.h.
+ (address_finish): Use record_error, and record_warning.
+ * locale/programs/ld-collate.c: Don't include error.h.
+ (collate_finish): Use record_error, and record_error_at_line.
+ * locale/programs/ld-ctype.c (ctype_finish): Use record_error.
+ (ctype_class_new): Likewise.
+ (ctype_map_new): Likewise.
+ (set_one_default): Likewise.
+ (set_class_defaults): Likewise.
+ (translit_flatten): Likewise.
+ (allocate_arrays): Use record_error, and record_verbose.
+ * locale/programs/ld-identification.c: Don't include error.h.
+ (indentation_finish): Use record_error and record_warning.
+ * locale/programs/ld-measurement.c: Don't include error.h.
+ (measurement_finish): Use record_error.
+ * locale/programs/ld-messages.c
+ (message_finish): Likewise.
+ * locale/programs/ld-monetary.c
+ (monetary_finish): Likewise.
+ * locale/programs/ld-name.c (name_finish): Use record_error
+ and record_warning.
+ * locale/programs/ld-numeric.c
+ (numeric_finish): Use record_error.
+ * locale/programs/ld-paper.c: Don't include error.h.
+ (paper_finish): Use record_error.
+ * locale/programs/ld-telephone.c: Don't include error.h.
+ (telephone_finish): Use record_error.
+ * locale/programs/ld-time.c (time_finish): Likewise.
+ * locale/programs/linereader.h (lr_error): Make inline func.
+ * locale/programs/localedef.c: Define recorded_warning_count,
+ and recorded_error_count.
+ (main): Use record_error. Use recorded_error_count and
+ recorded_warning_count to issue correct error returns.
+ (add_to_readlist): Use record_error.
+ (find_locale): Likewise.
+ (load_locale): Likewise.
+ * locale/programs/localedef.h: Remove be_quiet
+ and WITH_CUR_LOCALE.
+ * locale/programs/locarchive.c (compare_from_file): Use
+ record_error.
+ * locale/programs/locfile.c (write_locale_data): Use
+ record_error.
+ * locale/programs/repertoire.c: Dont include error.h.
+ (repertoire_complain): Use record_error.
+ * localedata/tst-fmon.sh: Expect failures from localedef.
+ * localedata/tst-locale.sh: Likewise.
+ * localedata/gen-locale.sh: Expect failures from SHIFT_JIS.
+
2017-10-12 Carlos O'Donell <carlos@redhat.com>
* localedata/unicode-gen/Makefile (GENERATED): Use i18n_ctype.
diff --git a/locale/programs/charmap-dir.c b/locale/programs/charmap-dir.c
index e55ab86e28..a9212b72fb 100644
--- a/locale/programs/charmap-dir.c
+++ b/locale/programs/charmap-dir.c
@@ -16,7 +16,6 @@
#include <dirent.h>
#include <errno.h>
-#include <error.h>
#include <fcntl.h>
#include <libintl.h>
#include <spawn.h>
@@ -54,8 +53,9 @@ charmap_opendir (const char *directory)
dir = opendir (directory);
if (dir == NULL)
{
- WITH_CUR_LOCALE (error (1, errno, gettext ("\
-cannot read character map directory `%s'"), directory));
+ record_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 129aefffc1..a670db9532 100644
--- a/locale/programs/charmap.c
+++ b/locale/programs/charmap.c
@@ -26,7 +26,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <error.h>
#include <stdint.h>
#include "localedef.h"
@@ -135,8 +134,9 @@ charmap_read (const char *filename, int verbose, int error_not_found,
result = parse_charmap (cmfile, verbose, be_quiet);
if (result == NULL && error_not_found)
- WITH_CUR_LOCALE (error (0, errno, _("\
-character map file `%s' not found"), filename));
+ record_error (0, errno,
+ _("character map file `%s' not found"),
+ filename);
}
if (result == NULL && filename != NULL && strchr (filename, '/') == NULL)
@@ -192,8 +192,9 @@ character map file `%s' not found"), filename));
result = parse_charmap (cmfile, verbose, be_quiet);
if (result == NULL)
- WITH_CUR_LOCALE (error (4, errno, _("\
-default character map file `%s' not found"), DEFAULT_CHARMAP));
+ record_error (4, errno,
+ _("default character map file `%s' not found"),
+ DEFAULT_CHARMAP);
}
if (result != NULL && result->code_set_name == NULL)
@@ -255,9 +256,9 @@ default character map file `%s' not found"), DEFAULT_CHARMAP));
if (failed)
{
- WITH_CUR_LOCALE (fprintf (stderr, _("\
+ record_warning (_("\
character map `%s' is not ASCII compatible, locale not ISO C compliant\n"),
- result->code_set_name));
+ result->code_set_name);
enc_not_ascii_compatible = true;
}
}
@@ -333,10 +334,9 @@ parse_charmap (struct linereader *cmfile, int verbose, int be_quiet)
result->mb_cur_min = result->mb_cur_max;
if (result->mb_cur_min > result->mb_cur_max)
{
- if (!be_quiet)
- WITH_CUR_LOCALE (error (0, 0, _("\
+ record_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;
}
@@ -395,11 +395,10 @@ parse_charmap (struct linereader *cmfile, int verbose, int be_quiet)
if (arg->tok != tok_number)
goto badarg;
- if (verbose
- && ((nowtok == tok_mb_cur_max
+ if ((nowtok == tok_mb_cur_max
&& result->mb_cur_max != 0)
|| (nowtok == tok_mb_cur_max
- && result->mb_cur_max != 0)))
+ && result->mb_cur_max != 0))
lr_error (cmfile, _("duplicate definition of <%s>"),
nowtok == tok_mb_cur_min
? "mb_cur_min" : "mb_cur_max");
@@ -839,16 +838,16 @@ only WIDTH definitions are allowed to follow the CHARMAP definition"));
continue;
default:
- WITH_CUR_LOCALE (error (5, 0, _("%s: error in state machine"),
- __FILE__));
+ record_error (5, 0, _("%s: error in state machine"),
+ __FILE__);
/* NOTREACHED */
}
break;
}
- if (state != 91 && !be_quiet)
- WITH_CUR_LOCALE (error (0, 0, _("%s: premature end of file"),
- cmfile->fname));
+ if (state != 91)
+ record_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 2488a5ce5c..a2892c71a2 100644
--- a/locale/programs/ld-address.c
+++ b/locale/programs/ld-address.c
@@ -20,7 +20,6 @@
#endif
#include <byteswap.h>
-#include <error.h>
#include <langinfo.h>
#include <string.h>
#include <stdint.h>
@@ -131,9 +130,8 @@ address_finish (struct localedef_t *locale, const struct charmap_t *charmap)
empty one. */
if (address == NULL)
{
- if (! be_quiet)
- WITH_CUR_LOCALE (error (0, 0, _("\
-No definition for %s category found"), "LC_ADDRESS"));
+ record_warning (_("\
+No definition for %s category found"), "LC_ADDRESS");
address_startup (NULL, locale, 0);
address = locale->categories[LC_ADDRESS].address;
nothing = 1;
@@ -143,8 +141,8 @@ No definition for %s category found"), "LC_ADDRESS"));
if (address->postal_fmt == NULL)
{
if (! nothing)
- WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"),
- "LC_ADDRESS", "postal_fmt"));
+ record_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";
}
@@ -155,8 +153,8 @@ No definition for %s category found"), "LC_ADDRESS"));
const char *cp = address->postal_fmt;
if (*cp == '\0')
- WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' must not be empty"),
- "LC_ADDRESS", "postal_fmt"));
+ record_error (0, 0, _("%s: field `%s' must not be empty"),
+ "LC_ADDRESS", "postal_fmt");
else
while (*cp != '\0')
{
@@ -167,9 +165,9 @@ No definition for %s category found"), "LC_ADDRESS"));
++cp;
if (strchr ("nafdbshNtreClzTSc%", *cp) == NULL)
{
- WITH_CUR_LOCALE (error (0, 0, _("\
+ record_error (0, 0, _("\
%s: invalid escape `%%%c' sequence in field `%s'"),
- "LC_ADDRESS", *cp, "postal_fmt"));
+ "LC_ADDRESS", *cp, "postal_fmt");
break;
}
}
@@ -181,8 +179,7 @@ No definition for %s category found"), "LC_ADDRESS"));
if (address->cat == NULL) \
{ \
if (verbose && ! nothing) \
- WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"), \
- "LC_ADDRESS", #cat)); \
+ record_warning (_("%s: field `%s' not defined"), "LC_ADDRESS", #cat); \
address->cat = ""; \
}
@@ -199,16 +196,16 @@ No definition for %s category found"), "LC_ADDRESS"));
if (address->lang_term == NULL)
{
if (verbose && ! nothing)
- WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"),
- "LC_ADDRESS", "lang_term"));
+ record_warning (_("%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)
- WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' must not be empty"),
- "LC_ADDRESS", "lang_term"));
+ record_warning (_("%s: field `%s' must not be empty"), "LC_ADDRESS",
+ "lang_term");
cnt = sizeof (iso639) / sizeof (iso639[0]);
}
else
@@ -218,9 +215,9 @@ No definition for %s category found"), "LC_ADDRESS"));
if (strcmp (address->lang_term, iso639[cnt].term) == 0)
break;
if (cnt == sizeof (iso639) / sizeof (iso639[0]))
- WITH_CUR_LOCALE (error (0, 0, _("\
+ record_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)
@@ -228,8 +225,8 @@ No definition for %s category found"), "LC_ADDRESS"));
if ((cnt == sizeof (iso639) / sizeof (iso639[0])
|| iso639[cnt].ab[0] != '\0')
&& verbose && ! nothing)
- WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"),
- "LC_ADDRESS", "lang_ab"));
+ record_warning (_("%s: field `%s' not defined"), "LC_ADDRESS",
+ "lang_ab");
address->lang_ab = "";
}
else if (address->lang_ab[0] == '\0')
@@ -237,14 +234,14 @@ No definition for %s category found"), "LC_ADDRESS"));
if ((cnt == sizeof (iso639) / sizeof (iso639[0])
|| iso639[cnt].ab[0] != '\0')
&& verbose)
- WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' must not be empty"),
- "LC_ADDRESS", "lang_ab"));
+ record_warning (_("%s: field `%s' must not be empty"),
+ "LC_ADDRESS", "lang_ab");
}
else if (cnt < sizeof (iso639) / sizeof (iso639[0])
&& iso639[cnt].ab[0] == '\0')
{
- WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' must not be defined"),
- "LC_ADDRESS", "lang_ab"));
+ record_error (0, 0, _("%s: field `%s' must not be defined"),
+ "LC_ADDRESS", "lang_ab");
address->lang_ab = "";
}
@@ -257,16 +254,16 @@ No definition for %s category found"), "LC_ADDRESS"));
if (strcmp (address->lang_ab, iso639[cnt].ab) == 0)
break;
if (cnt == sizeof (iso639) / sizeof (iso639[0]))
- WITH_CUR_LOCALE (error (0, 0, _("\
+ record_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
&& iso639[cnt].ab[0] != '\0')
- WITH_CUR_LOCALE (error (0, 0, _("\
+ record_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)
@@ -275,8 +272,8 @@ No definition for %s category found"), "LC_ADDRESS"));
else if (address->lang_lib[0] == '\0')
{
if (verbose)
- WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' must not be empty"),
- "LC_ADDRESS", "lang_lib"));
+ record_warning (_("%s: field `%s' must not be empty"),
+ "LC_ADDRESS", "lang_lib");
}
else
{
@@ -286,22 +283,22 @@ No definition for %s category found"), "LC_ADDRESS"));
if (strcmp (address->lang_lib, iso639[cnt].lib) == 0)
break;
if (cnt == sizeof (iso639) / sizeof (iso639[0]))
- WITH_CUR_LOCALE (error (0, 0, _("\
+ record_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)
- WITH_CUR_LOCALE (error (0, 0, _("\
+ record_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)
- WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"),
- "LC_ADDRESS", "country_num"));
+ record_warning (_("%s: field `%s' not defined"), "LC_ADDRESS",
+ "country_num");
cnt = sizeof (iso3166) / sizeof (iso3166[0]);
}
else
@@ -311,36 +308,35 @@ No definition for %s category found"), "LC_ADDRESS"));
break;
if (cnt == sizeof (iso3166) / sizeof (iso3166[0]))
- WITH_CUR_LOCALE (error (0, 0, _("\
+ record_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)
- WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"),
- "LC_ADDRESS", "country_ab2"));
+ record_warning (_("%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)
- WITH_CUR_LOCALE (error (0, 0,
- _("%s: `%s' value does not match `%s' value"),
- "LC_ADDRESS", "country_ab2", "country_num"));
+ record_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)
- WITH_CUR_LOCALE (error (0, 0, _("%s: field `%s' not defined"),
- "LC_ADDRESS", "country_ab3"));
+ record_warning (_("%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)
- WITH_CUR_LOCALE (error (0, 0, _("\
+ record_error (0, 0, _("\
%s: `%s' value does not match `%s' value"),
- "LC_ADDRESS", "country_ab3", "country_num"));
+ "LC_ADDRESS", "country_ab3", "country_num");
}
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index cec848cb7c..94864ae430 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -20,7 +20,6 @@
#endif
#include <errno.h>
-#include <error.h>
#include <stdlib.h>
#include <wchar.h>
#include <stdint.h>
@@ -1560,10 +1559,9 @@ collate_finish (struct localedef_t *locale, const struct charmap_t *charmap)
if (collate == NULL)
{
- /* No data, no check. */
- if (! be_quiet)
- WITH_CUR_LOCALE (error (0, 0, _("No definition for %s category found"),
- "LC_COLLATE"));
+ /* No data, no check. Issue a warning. */
+ record_warning (_("No definition for %s category found"),
+ "LC_COLLATE");
return;
}
@@ -1579,9 +1577,9 @@ collate_finish (struct localedef_t *locale, const struct charmap_t *charmap)
&& ((sect->rules[i] & sort_position)
!= (collate->current_section->rules[i] & sort_position)))
{
- WITH_CUR_LOCALE (error (0, 0, _("\
+ record_error (0, 0, _("\
%s: `position' must be used for a specific level in all sections or none"),
- "LC_COLLATE"));
+ "LC_COLLATE");
break;
}
@@ -1602,10 +1600,9 @@ collate_finish (struct localedef_t *locale, const struct charmap_t *charmap)
{
if (runp->weights[i].w[j]->weights == NULL)
{
- WITH_CUR_LOCALE (error_at_line (0, 0, runp->file,
- runp->line,
- _("symbol `%s' not defined"),
- runp->weights[i].w[j]->name));
+ record_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;
@@ -1678,14 +1675,13 @@ 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. */
- WITH_CUR_LOCALE (error_at_line (0, 0, (*eptr)->file,
- (*eptr)->line,
- _("\
+ record_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));
+
+ record_error_at_line (0, 0, runp->file, runp->line,
+ _("symbol `%s'"), runp->name);
goto dont_insert;
}
else if (c < 0)
@@ -1784,14 +1780,13 @@ symbol `%s' has the same encoding as"), (*eptr)->name);
/* This should not happen. It means that we have
two symbols with the same byte sequence. It is
of course an error. */
- WITH_CUR_LOCALE (error_at_line (0, 0, (*eptr)->file,
- (*eptr)->line,
- _("\
+ record_error_at_line (0, 0, (*eptr)->file,
+ (*eptr)->line,