diff options
Diffstat (limited to 'locale/programs/charmap.c')
-rw-r--r-- | locale/programs/charmap.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/locale/programs/charmap.c b/locale/programs/charmap.c index 59f317a699..14cb4f4089 100644 --- a/locale/programs/charmap.c +++ b/locale/programs/charmap.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1996,1998,1999,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. @@ -34,7 +34,6 @@ #include "linereader.h" #include "charmap.h" #include "charmap-dir.h" -#include "locfile.h" #include "repertoire.h" #include <assert.h> @@ -47,7 +46,8 @@ extern void *xmalloc (size_t __n); /* Prototypes for local functions. */ -static struct charmap_t *parse_charmap (struct linereader *cmfile); +static struct charmap_t *parse_charmap (struct linereader *cmfile, + int verbose, int be_quiet); static void new_width (struct linereader *cmfile, struct charmap_t *result, const char *from, const char *to, unsigned long int width); @@ -55,6 +55,9 @@ static void charmap_new_char (struct linereader *lr, struct charmap_t *cm, int nbytes, char *bytes, const char *from, const char *to, int decimal_ellipsis, int step); + +static const char *null_pointer; + static struct linereader * cmlr_open (const char *directory, const char *name, kw_hash_fct_t hf) { @@ -82,7 +85,7 @@ cmlr_open (const char *directory, const char *name, kw_hash_fct_t hf) } struct charmap_t * -charmap_read (const char *filename) +charmap_read (const char *filename, int verbose, int be_quiet, int use_default) { struct charmap_t *result = NULL; @@ -129,14 +132,14 @@ charmap_read (const char *filename) if (cmfile != NULL) { - result = parse_charmap (cmfile); + result = parse_charmap (cmfile, verbose, be_quiet); if (result == NULL && !be_quiet) error (0, errno, _("character map file `%s' not found"), filename); } } - if (result == NULL && filename != NULL) + if (result == NULL && filename != NULL && strchr (filename, '/') == NULL) { /* OK, one more try. We also accept the names given to the character sets in the files. Sometimes they differ from the @@ -170,7 +173,7 @@ charmap_read (const char *filename) cmfile = cmlr_open (CHARMAP_PATH, dirent, charmap_hash); if (cmfile != NULL) - result = parse_charmap (cmfile); + result = parse_charmap (cmfile, verbose, be_quiet); break; } @@ -180,13 +183,13 @@ charmap_read (const char *filename) } } - if (result == NULL) + if (result == NULL && DEFAULT_CHARMAP != NULL) { struct linereader *cmfile; cmfile = cmlr_open (CHARMAP_PATH, DEFAULT_CHARMAP, charmap_hash); if (cmfile != NULL) - result = parse_charmap (cmfile); + result = parse_charmap (cmfile, verbose, be_quiet); if (result == NULL) error (4, errno, _("default character map file `%s' not found"), @@ -220,7 +223,7 @@ charmap_read (const char *filename) must have the same value as the 'wchar_t' code, which in glibc is the same as the Unicode code, which for all of the enumerated characters is identical to the ASCII code. */ - if (result != NULL) + if (result != NULL && use_default) { static const char basic_charset[] = { @@ -256,7 +259,7 @@ character map `%s' is not ASCII compatible, locale not ISO C compliant\n"), static struct charmap_t * -parse_charmap (struct linereader *cmfile) +parse_charmap (struct linereader *cmfile, int verbose, int be_quiet) { struct charmap_t *result; int state; @@ -293,7 +296,7 @@ parse_charmap (struct linereader *cmfile) while (1) { /* What's on? */ - struct token *now = lr_token (cmfile, NULL, NULL); + struct token *now = lr_token (cmfile, NULL, NULL, verbose); enum token_t nowtok = now->tok; struct token *arg; @@ -351,7 +354,7 @@ parse_charmap (struct linereader *cmfile) } /* We know that we need an argument. */ - arg = lr_token (cmfile, NULL, NULL); + arg = lr_token (cmfile, NULL, NULL, verbose); switch (nowtok) { |