aboutsummaryrefslogtreecommitdiff
path: root/locale/programs/localedef.c
diff options
context:
space:
mode:
Diffstat (limited to 'locale/programs/localedef.c')
-rw-r--r--locale/programs/localedef.c62
1 files changed, 40 insertions, 22 deletions
diff --git a/locale/programs/localedef.c b/locale/programs/localedef.c
index 6acc1342c7..7d76154228 100644
--- a/locale/programs/localedef.c
+++ b/locale/programs/localedef.c
@@ -51,6 +51,12 @@ int posix_conformance;
/* If not zero give a lot more messages. */
int verbose;
+/* Warnings recorded by record_warnings (see localedef.h). */
+int recorded_warning_count;
+
+/* Errors recorded by record_error (see localedef.h). */
+int recorded_error_count;
+
/* If not zero suppress warnings and information messages. */
int be_quiet;
@@ -236,8 +242,8 @@ main (int argc, char *argv[])
defines error code 3 for this situation so I think it must be
a fatal error (see P1003.2 4.35.8). */
if (sysconf (_SC_2_LOCALEDEF) < 0)
- WITH_CUR_LOCALE (error (3, 0, _("\
-FATAL: system does not define `_POSIX2_LOCALEDEF'")));
+ record_error (3, 0, _("\
+FATAL: system does not define `_POSIX2_LOCALEDEF'"));
/* Process charmap file. */
charmap = charmap_read (charmap_file, verbose, 1, be_quiet, 1);
@@ -250,8 +256,8 @@ FATAL: system does not define `_POSIX2_LOCALEDEF'")));
/* Now read the locale file. */
if (locfile_read (&global, charmap) != 0)
- WITH_CUR_LOCALE (error (4, errno, _("\
-cannot open locale definition file `%s'"), input_file));
+ record_error (4, errno, _("\
+cannot open locale definition file `%s'"), input_file);
/* Perhaps we saw some `copy' instructions. */
while (1)
@@ -266,29 +272,41 @@ cannot open locale definition file `%s'"), input_file));
break;
if (locfile_read (runp, charmap) != 0)
- WITH_CUR_LOCALE (error (4, errno, _("\
-cannot open locale definition file `%s'"), runp->name));
+ record_error (4, errno, _("\
+cannot open locale definition file `%s'"), runp->name);
}
/* Check the categories we processed in source form. */
check_all_categories (locales, charmap);
- /* We are now able to write the data files. If warning were given we
- do it only if it is explicitly requested (--force). */
- if (error_message_count == 0 || force_output != 0)
+ /* What we do next depends on the number of errors and warnings we
+ have generated in processing the input files.
+
+ * No errors: Write the output file.
+
+ * Some warnings: Write the output file and exit with status 1 to
+ indicate there may be problems using the output file e.g. missing
+ data that makes it difficult to use
+
+ * Errors: We don't write the output file and we exit with status 4
+ to indicate no output files were written.
+
+ The use of -c|--force writes the output file even if errors were
+ seen. */
+ if (recorded_error_count == 0 || force_output != 0)
{
if (cannot_write_why != 0)
- WITH_CUR_LOCALE (error (4, cannot_write_why, _("\
-cannot write output files to `%s'"), output_path ? : argv[remaining]));
+ record_error (4, cannot_write_why, _("\
+cannot write output files to `%s'"), output_path ? : argv[remaining]);
else
write_all_categories (locales, charmap, argv[remaining], output_path);
}
else
- WITH_CUR_LOCALE (error (4, 0, _("\
-no output file produced because warnings were issued")));
+ record_error (4, 0, _("\
+no output file produced because errors were issued"));
/* This exit status is prescribed by POSIX.2 4.35.7. */
- exit (error_message_count != 0);
+ exit (recorded_warning_count != 0);
}
@@ -567,14 +585,14 @@ add_to_readlist (int category, const char *name, const char *repertoire_name,
if (generate
&& (runp->needed & (1 << category)) != 0
&& (runp->avail & (1 << category)) == 0)
- WITH_CUR_LOCALE (error (5, 0, _("\
-circular dependencies between locale definitions")));
+ record_error (5, 0, _("\
+circular dependencies between locale definitions"));
if (copy_locale != NULL)
{
if (runp->categories[category].generic != NULL)
- WITH_CUR_LOCALE (error (5, 0, _("\
-cannot add already read locale `%s' a second time"), name));
+ record_error (5, 0, _("\
+cannot add already read locale `%s' a second time"), name);
else
runp->categories[category].generic =
copy_locale->categories[category].generic;
@@ -599,8 +617,8 @@ find_locale (int category, const char *name, const char *repertoire_name,
if ((result->avail & (1 << category)) == 0
&& locfile_read (result, charmap) != 0)
- WITH_CUR_LOCALE (error (4, errno, _("\
-cannot open locale definition file `%s'"), result->name));
+ record_error (4, errno, _("\
+cannot open locale definition file `%s'"), result->name);
return result;
}
@@ -619,8 +637,8 @@ load_locale (int category, const char *name, const char *repertoire_name,
if ((result->avail & (1 << category)) == 0
&& locfile_read (result, charmap) != 0)
- WITH_CUR_LOCALE (error (4, errno, _("\
-cannot open locale definition file `%s'"), result->name));
+ record_error (4, errno, _("\
+cannot open locale definition file `%s'"), result->name);
return result;
}