From 5a97622d5e053e935af0a9715ddd941fdaafcaf9 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 22 Feb 1997 01:20:46 +0000 Subject: update from main archive 970221 1997-02-22 00:17 Ulrich Drepper * catgets/gencat.c: Change to use argp. * db/makedb: Likewise. * locale/programs/localedef.c: Likewise. * locale/programs/locale.c: Little adjustment for better usage of argp. 1997-02-20 20:07 Greg McGary * Makeconfig: Add rules for libc with bounded pointers. * Makerules: Likewise. * config.make.in: Likewise. * configure.in: Likewise. 1997-02-21 10:41 Miles Bader * argp.h (OPTION_NO_USAGE): New macro. * argp-help.c (usage_long_opt, usage_argful_short_opt, add_argless_short_opt): Implement OPTION_NO_USAGE. 1997-02-20 16:41 Andreas Schwab * malloc/obstack.h: Fix typo. 1997-02-20 15:56 Miles Bader * argp-fmtstream.c (__argp_fmtstream_update): Account for case where NEXTLINE points one past the end of the active buffer. * argp-help.c : New include. (__argp_failure): Only exit if STATE says it's ok. (print_header, hol_entry_help): Use UPARAMS fields rather than constants. (_help): Call fill_in_uparams if necessary. (struct hol_help_state): New type. (struct pentry_state): Add hhstate field. Remove prev_entry & sep_groups fields. (hol_entry_help): Add HHSTATE parameter. Remove prev_entry & sep_groups parameters. Suppress duplicate arguments if requested, and note the fact. (print_header, comma): Use PEST->hhstate fields. (hol_help): Add HHSTATE variable & pass to hol_entry_help. Remove LAST_ENTRY & SEP_GROUPS variables. If any suplicate arguments were suppressed, print explanatory note. (filter_doc): Replace PEST parameter with STATE. (struct uparams): New type. (uparams): New variable. (struct uparam_name): New type. (uparam_names): New variable. (fill_in_uparams): New function. (__argp_failure, __argp_error, __argp_state_help): Make STATE parameter const. * argp.h (argp_state_help, __argp_state_help, argp_usage, __argp_usage, argp_error, __argp_error, argp_failure, __argp_failure): Make STATE parameter const. (ARGP_KEY_HELP_DUP_ARGS_NOTE): New macro. * argp.h (argp_program_bug_address): Make const. 1997-02-20 19:20 Ulrich Drepper * sysdeps/unix/mman/syscalls.list: Explain msync interface. 1997-02-19 01:37 Erik Troan * shadow/sgetspent_r.c: Accept empty third, fourth and fifth fields. 1997-02-20 14:44 Andreas Jaeger * stdio-common/test-fseek.c: Remove temporary file, add copyright. 1997-02-20 17:51 Ulrich Drepper * sysdeps/generic/netinet/in.h: Protect contents using __BEGIN/END_DECLS. Reported by a sun . * inet/net/ethernet.h: Move to sysdeps/unix/sysv/linux/net. * inet/Makefile (headers): Remove net/ethernet.h. * sysdeps/unix/sysv/linux/Makefile: Install net/ethernet.h. * sysdeps/unix/sysv/linux/Dist: Distribute net/ethernet.h. 1997-02-20 15:23 Thorsten Kukuk * nss/nsswitch.c (__nss_configure_lookup): Use correct test when searching in sorted array. 1997-02-20 01:24 Philip Blundell * inet/getnameinfo.c: Change to use reentrant getXXbyYY functions and protect modification of global data. 1997-02-19 18:48 Miles Bader * argp-parse.c (argp_default_parser): Set STATE->name for OPT_PROGNAME. (parser_init): Use the basename for PARSER->state.name. * argp-help.c (__argp_error, __argp_failure, __argp_state_help): Use PROGRAM_INVOCATION_SHORT_NAME instead of PROGRAM_INVOCATION_NAME. * argp-parse.c (parser_init): Set PARSER->state.flags. Make check whether PARSER has the prog name in argv[0] at the proper place. 1997-02-19 23:34 Ulrich Drepper * locale/programs/ld-time.c (time_finish): t_fmt_ampm is optional. Use default value instead of printing a warning. * nss/XXX-lookup.c: Add misssing explanation. 1997-02-19 19:14 Andreas Jaeger * inet/in6_addr.c: Add missing braces. * inet/getnameinfo.c: Include . * sysdeps/posix/getaddrinfo.c: Include . 1997-02-19 11:46 Ulrich Drepper * string/strxfrm.c (STRCOLL): Correct handling of `position' levels with no non-IGNOREd element and handling of NUL byte. * string/strcoll.c (STRXFRM): Likewise. * locale/weight.h: Likewise. * shadow/sgetspent_r.c (LINE_PARSER): Add missing ')'. --- db/makedb.c | 198 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 100 insertions(+), 98 deletions(-) (limited to 'db') diff --git a/db/makedb.c b/db/makedb.c index 7ce9548788..9f84ea39fc 100644 --- a/db/makedb.c +++ b/db/makedb.c @@ -1,4 +1,4 @@ -/* makedb -- create simple DB database from textual input. +/* Create simple DB database from textual input. Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -18,12 +18,12 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include #include +#include #include #include #include -#include #include #include #include @@ -35,20 +35,55 @@ #define PACKAGE _libc_intl_domainname -/* Long options. */ -static const struct option long_options[] = +/* If non-zero convert key to lower case. */ +static int to_lowercase; + +/* If non-zero print content of input file, one entry per line. */ +static int do_undo; + +/* If non-zero do not print informational messages. */ +static int be_quiet; + +/* Name of output file. */ +static const char *output_name; + +/* Name and version of program. */ +static void print_version (FILE *stream, struct argp_state *state); +void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version; + +/* Definitions of arguments for argp functions. */ +static const struct argp_option options[] = +{ + { "fold-case", 'f', NULL, 0, N_("Convert key to lower case") }, + { "output", 'o', N_("NAME"), 0, N_("Write output to file NAME") }, + { "quiet", 'q', NULL, 0, + N_("Do not print messages while building database") }, + { "undo", 'u', NULL, 0, + N_("Print content of database file, one entry a line") }, + { NULL, 0, NULL, 0, NULL } +}; + +/* Short description of program. */ +static const char doc[] = N_("Create simple DB database from textual input."); + +/* Strings for arguments in help texts. */ +static const char args_doc[] = N_("\ +INPUT-FILE OUTPUT-FILE\n-o OUTPUT-FILE INPUT-FILE\n-u INPUT-FILE"); + +/* Prototype for option handler. */ +static error_t parse_opt __P ((int key, char *arg, struct argp_state *state)); + +/* Function to print some extra text in the help message. */ +static char *more_help __P ((int key, const char *text, void *input)); + +/* Data structure to communicate with argp functions. */ +static struct argp argp = { - { "help", no_argument, NULL, 'h' }, - { "fold-case", no_argument, NULL, 'f' }, - { "output", required_argument, NULL, 'o' }, - { "quiet", no_argument, NULL, 'q' }, - { "undo", no_argument, NULL, 'u' }, - { "version", no_argument, NULL, 'V' }, - { NULL, 0, NULL, 0} + options, parse_opt, args_doc, doc, NULL, more_help }; + /* Prototypes for local functions. */ -static void usage __P ((int status)) __attribute__ ((noreturn)); static int process_input __P ((FILE *input, const char *inname, DB *output, int to_lowercase, int be_quiet)); static int print_database __P ((DB *db)); @@ -60,17 +95,10 @@ main (argc, argv) int argc; char *argv[]; { - const char *output_name; const char *input_name; FILE *input_file; DB *db_file; - int do_help; - int do_version; - int to_lowercase; - int do_undo; - int be_quiet; int status; - int opt; /* Set locale via LC_ALL. */ setlocale (LC_ALL, ""); @@ -79,59 +107,10 @@ main (argc, argv) textdomain (_libc_intl_domainname); /* Initialize local variables. */ - do_help = 0; - do_version = 0; - to_lowercase = 0; - do_undo = 0; - be_quiet = 0; - output_name = NULL; - - while ((opt = getopt_long (argc, argv, "fho:uV", long_options, NULL)) != -1) - switch (opt) - { - case '\0': /* Long option. */ - break; - case 'h': - do_help = 1; - break; - case 'f': - to_lowercase = 1; - break; - case 'o': - output_name = optarg; - break; - case 'q': - be_quiet = 1; - break; - case 'u': - do_undo = 1; - break; - case 'V': - do_version = 1; - break; - default: - usage (EXIT_FAILURE); - } - - /* Version information is requested. */ - if (do_version) - { - printf ("makedb (GNU %s) %s\n", PACKAGE, VERSION); - printf (_("\ -Copyright (C) %s Free Software Foundation, Inc.\n\ -This is free software; see the source for copying conditions. There is NO\n\ -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ -"), "1996, 1997"); - printf (_("Written by %s.\n"), "Ulrich Drepper"); - - exit (EXIT_SUCCESS); - } + input_name = NULL; - /* Help is requested. */ - if (do_help) - usage (EXIT_SUCCESS); - else if (do_version) - exit (EXIT_SUCCESS); + /* Parse and process arguments. */ + argp_parse (&argp, argc, argv, 0, 0, NULL); /* Determine file names. */ if (do_undo || output_name != NULL) @@ -140,7 +119,8 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ { wrong_arguments: error (0, 0, gettext ("wrong number of arguments")); - usage (EXIT_FAILURE); + argp_help (&argp, stdout, ARGP_HELP_SEE, + program_invocation_short_name); } input_name = argv[optind]; } @@ -201,35 +181,57 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ } -static void -usage (status) - int status; +/* Handle program arguments. */ +static error_t +parse_opt (int key, char *arg, struct argp_state *state) { - if (status != EXIT_SUCCESS) - fprintf (stderr, gettext ("Try `%s --help' for more information.\n"), - program_invocation_name); - else + switch (key) + { + case 'f': + to_lowercase = 1; + break; + case 'o': + output_name = arg; + break; + case 'q': + be_quiet = 1; + break; + case 'u': + do_undo = 1; + break; + default: + return ARGP_ERR_UNKNOWN; + } + return 0; +} + + +static char * +more_help (int key, const char *text, void *input) +{ + switch (key) { - printf (gettext ("\ -Usage: %s [OPTION]... INPUT-FILE OUTPUT-FILE\n\ - %s [OPTION]... -o OUTPUT-FILE INPUT-FILE\n\ - %s [OPTION]... -u INPUT-FILE\n\ -Mandatory arguments to long options are mandatory for short options too.\n\ - -f, --fold-case convert key to lower case\n\ - -h, --help display this help and exit\n\ - -o, --output=NAME write output to file NAME\n\ - --quiet don't print messages while building database\n\ - -u, --undo print content of database file, one entry a line\n\ - -V, --version output version information and exit\n\ -If INPUT-FILE is -, input is read from standard input.\n"), - program_invocation_name, program_invocation_name, - program_invocation_name); - fputs (gettext ("\ -Report bugs using the `glibcbug' script to .\n"), - stdout); + case ARGP_KEY_HELP_EXTRA: + /* We print some extra information. */ + return strdup (gettext ("\ +Report bugs using the `glibcbug' script to .\n")); + default: + break; } + return (char *) text; +} - exit (status); +/* Print the version information. */ +static void +print_version (FILE *stream, struct argp_state *state) +{ + fprintf (stream, "makedb (GNU %s) %s\n", PACKAGE, VERSION); + fprintf (stream, gettext ("\ +Copyright (C) %s Free Software Foundation, Inc.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ +"), "1996, 1997"); + fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper"); } -- cgit v1.2.3-65-gdbad