aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog129
-rw-r--r--FAQ6
-rw-r--r--Makeconfig8
-rw-r--r--Makerules6
-rw-r--r--argp/argp-fmtstream.c14
-rw-r--r--argp/argp-help.c329
-rw-r--r--argp/argp-parse.c27
-rw-r--r--argp/argp-test.c2
-rw-r--r--argp/argp.h75
-rw-r--r--catgets/gencat.c168
-rw-r--r--config.make.in1
-rwxr-xr-xconfigure100
-rw-r--r--configure.in4
-rw-r--r--db/makedb.c198
-rw-r--r--inet/getnameinfo.c158
-rw-r--r--inet/in6_addr.c6
-rw-r--r--locale/programs/ld-time.c7
-rw-r--r--locale/programs/locale.c20
-rw-r--r--locale/programs/localedef.c261
-rw-r--r--locale/weight.h30
-rw-r--r--malloc/obstack.h2
-rw-r--r--nss/XXX-lookup.c5
-rw-r--r--nss/nsswitch.c2
-rw-r--r--shadow/sgetspent_r.c2
-rw-r--r--stdio-common/test-fseek.c22
-rw-r--r--string/strcoll.c34
-rw-r--r--string/strxfrm.c20
-rw-r--r--sysdeps/generic/netinet/in.h5
-rw-r--r--sysdeps/posix/getaddrinfo.c15
-rw-r--r--sysdeps/unix/mman/syscalls.list4
-rw-r--r--sysdeps/unix/sysv/linux/Dist1
-rw-r--r--sysdeps/unix/sysv/linux/Makefile2
-rw-r--r--sysdeps/unix/sysv/linux/net/ethernet.h (renamed from inet/net/ethernet.h)0
33 files changed, 1112 insertions, 551 deletions
diff --git a/ChangeLog b/ChangeLog
index 7e805491ed..74abd961cf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,132 @@
+1997-02-22 00:17 Ulrich Drepper <drepper@cygnus.com>
+
+ * 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 <gkm@eng.ascend.com>
+
+ * Makeconfig: Add rules for libc with bounded pointers.
+ * Makerules: Likewise.
+ * config.make.in: Likewise.
+ * configure.in: Likewise.
+
+1997-02-21 10:41 Miles Bader <miles@gnu.ai.mit.edu>
+
+ * 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 <schwab@issan.informatik.uni-dortmund.de>
+
+ * malloc/obstack.h: Fix typo.
+
+1997-02-20 15:56 Miles Bader <miles@gnu.ai.mit.edu>
+
+ * argp-fmtstream.c (__argp_fmtstream_update): Account for case
+ where NEXTLINE points one past the end of the active buffer.
+
+ * argp-help.c <stddef.h>: 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 <drepper@cygnus.com>
+
+ * sysdeps/unix/mman/syscalls.list: Explain msync interface.
+
+1997-02-19 01:37 Erik Troan <ewt@redhat.com>
+
+ * shadow/sgetspent_r.c: Accept empty third, fourth and fifth fields.
+
+1997-02-20 14:44 Andreas Jaeger <aj@arthur.pfalz.de>
+
+ * stdio-common/test-fseek.c: Remove temporary file, add
+ copyright.
+
+1997-02-20 17:51 Ulrich Drepper <drepper@cygnus.com>
+
+ * sysdeps/generic/netinet/in.h: Protect contents using
+ __BEGIN/END_DECLS. Reported by a sun <asun@zoology.washington.edu>.
+
+ * 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 <kukuk@weber.uni-paderborn.de>
+
+ * nss/nsswitch.c (__nss_configure_lookup): Use correct test when
+ searching in sorted array.
+
+1997-02-20 01:24 Philip Blundell <pjb27@cam.ac.uk>
+
+ * inet/getnameinfo.c: Change to use reentrant getXXbyYY functions
+ and protect modification of global data.
+
+1997-02-19 18:48 Miles Bader <miles@gnu.ai.mit.edu>
+
+ * 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 <drepper@cygnus.com>
+
+ * 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 <aj@arthur.pfalz.de>
+
+ * inet/in6_addr.c: Add missing braces.
+
+ * inet/getnameinfo.c: Include <arpa/inet.h>.
+
+ * sysdeps/posix/getaddrinfo.c: Include <arpa/inet.h>.
+
+1997-02-19 11:46 Ulrich Drepper <drepper@cygnus.com>
+
+ * 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 ')'.
+
1997-02-19 03:28 Miles Bader <miles@gnu.ai.mit.edu>
* argp/argp-help.c: Add support for user provided filter of help
diff --git a/FAQ b/FAQ
index 2f2f0a9234..68043f8d9b 100644
--- a/FAQ
+++ b/FAQ
@@ -568,12 +568,6 @@ something like this:
GROUP ( libc.so.6 ld.so.1 libc.a )
-{UD} The Linux ldconfig file probably generates a link libc.so ->
-libc.so.6 in /lib. This is not correct. There must not be such a
-link. The linker script with the above contents is placed in
-/usr/lib which is enough for the linker.
-
-
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q18] ``The prototypes for `connect', `accept', `getsockopt',
`setsockopt', `getsockname', `getpeername', `send',
diff --git a/Makeconfig b/Makeconfig
index 2feb2b7088..811392b13e 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -509,6 +509,14 @@ CFLAGS-.o = -g0 -O99 -fomit-frame-pointer
CFLAGS-.so += $(CFLAGS-.o)
libtype.go = lib%_g.a
endif
+ifeq (yes,$(build-bounded))
+# Under --enable-bounded, we build the library with `-fbounded-pointers -g'
+# to runtime bounds checking. The bounded-pointer objects are named foo.bo.
+object-suffixes += .bo
+CPPFLAGS-.bo = -DBOUNDED_POINTERS
+CFLAGS-.bo = -g -fbounded-pointers
+libtype.bo = lib%_b.a
+endif
+gnu-stabs = $(shell echo>&2 '*** BARF ON ME')
diff --git a/Makerules b/Makerules
index 3854af79a7..c5d5663bda 100644
--- a/Makerules
+++ b/Makerules
@@ -171,16 +171,19 @@ $(objpfx)%.o: %.S $(before-compile); $(compile-command.S)
$(objpfx)%.so: %.S $(before-compile); $(compile-command.S)
$(objpfx)%.po: %.S $(before-compile); $(compile-command.S)
$(objpfx)%.go: %.S $(before-compile); $(compile-command.S)
+$(objpfx)%.bo: %.S $(before-compile); $(compile-command.S)
$(objpfx)%.d: %.S $(before-compile); $(+make-deps)
$(objpfx)%.o: %.s $(before-compile); $(compile-command.s)
$(objpfx)%.so: %.s $(before-compile); $(compile-command.s)
$(objpfx)%.po: %.s $(before-compile); $(compile-command.s)
$(objpfx)%.go: %.s $(before-compile); $(compile-command.s)
+$(objpfx)%.bo: %.s $(before-compile); $(compile-command.s)
$(objpfx)%.d: %.s $(common-objpfx)dummy.d; $(make-dummy-dep)
$(objpfx)%.o: %.c $(before-compile); $(compile-command.c)
$(objpfx)%.so: %.c $(before-compile); $(compile-command.c)
$(objpfx)%.po: %.c $(before-compile); $(compile-command.c)
$(objpfx)%.go: %.c $(before-compile); $(compile-command.c)
+$(objpfx)%.bo: %.c $(before-compile); $(compile-command.c)
$(objpfx)%.d: %.c $(before-compile); $(+make-deps)
# Omit the objpfx rules when building in the source tree, because
@@ -192,16 +195,19 @@ $(objpfx)%.o: $(objpfx)%.S $(before-compile); $(compile-command.S)
$(objpfx)%.so: $(objpfx)%.S $(before-compile); $(compile-command.S)
$(objpfx)%.po: $(objpfx)%.S $(before-compile); $(compile-command.S)
$(objpfx)%.go: $(objpfx)%.S $(before-compile); $(compile-command.S)
+$(objpfx)%.bo: $(objpfx)%.S $(before-compile); $(compile-command.S)
$(objpfx)%.d: $(objpfx)%.S $(before-compile); $(+make-deps)
$(objpfx)%.o: $(objpfx)%.s $(before-compile); $(compile-command.s)
$(objpfx)%.so: $(objpfx)%.s $(before-compile); $(compile-command.s)
$(objpfx)%.po: $(objpfx)%.s $(before-compile); $(compile-command.s)
$(objpfx)%.go: $(objpfx)%.s $(before-compile); $(compile-command.s)
+$(objpfx)%.bo: $(objpfx)%.s $(before-compile); $(compile-command.s)
$(objpfx)%.d: $(objpfx)%.s $(common-objpfx)dummy.d; $(make-dummy-dep)
$(objpfx)%.o: $(objpfx)%.c $(before-compile); $(compile-command.c)
$(objpfx)%.so: $(objpfx)%.c $(before-compile); $(compile-command.c)
$(objpfx)%.po: $(objpfx)%.c $(before-compile); $(compile-command.c)
$(objpfx)%.go: $(objpfx)%.c $(before-compile); $(compile-command.c)
+$(objpfx)%.bo: $(objpfx)%.c $(before-compile); $(compile-command.c)
$(objpfx)%.d: $(objpfx)%.c $(before-compile); $(+make-deps)
endif
diff --git a/argp/argp-fmtstream.c b/argp/argp-fmtstream.c
index c7203deac6..ab2e870af8 100644
--- a/argp/argp-fmtstream.c
+++ b/argp/argp-fmtstream.c
@@ -240,7 +240,14 @@ __argp_fmtstream_update (argp_fmtstream_t fs)
nextline = p;
}
- if (nextline - (nl + 1) < fs->wmargin)
+ /* Note: There are a bunch of tests below for
+ NEXTLINE == BUF + LEN + 1; this case is where NL happens to fall
+ at the end of the buffer, and NEXTLINE is in fact empty (and so
+ we need not be careful to maintain its contents). */
+
+ if (nextline == buf + len + 1
+ ? fs->end - nl < fs->wmargin + 1
+ : nextline - (nl + 1) < fs->wmargin)
/* The margin needs more blanks than we removed. */
if (fs->end - fs->p > fs->wmargin + 1)
/* Make some space for them. */
@@ -265,7 +272,8 @@ __argp_fmtstream_update (argp_fmtstream_t fs)
the next word. */
*nl++ = '\n';
- if (nextline - nl >= fs->wmargin)
+ if (nextline - nl >= fs->wmargin
+ || (nextline == buf + len + 1 && fs->end - nextline >= fs->wmargin))
/* Add blanks up to the wrap margin column. */
for (i = 0; i < fs->wmargin; ++i)
*nl++ = ' ';
@@ -275,7 +283,7 @@ __argp_fmtstream_update (argp_fmtstream_t fs)
/* Copy the tail of the original buffer into the current buffer
position. */
- if (nl != nextline)
+ if (nl < nextline)
memmove (nl, nextline, buf + len - nextline);
len -= nextline - buf;
diff --git a/argp/argp-help.c b/argp/argp-help.c
index 84f9ca51c9..e954beb5a9 100644
--- a/argp/argp-help.c
+++ b/argp/argp-help.c
@@ -22,6 +22,7 @@
#include <config.h>
#endif
+#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
@@ -44,7 +45,17 @@
#include "argp.h"
#include "argp-fmtstream.h"
#include "argp-namefrob.h"
+
+/* User-selectable (using an environment variable) formatting parameters.
+
+ These may be specified in an environment variable called `ARGP_HELP_FMT',
+ with a contents like: VAR1=VAL1,VAR2=VAL2,BOOLVAR2,no-BOOLVAR2
+ Where VALn must be a positive integer. The list of variables is in the
+ UPARAM_NAMES vector, below. */
+/* Default parameters. */
+#define DUP_ARGS 0 /* True if option argument can be duplicated. */
+#define DUP_ARGS_NOTE 1 /* True to print a note about duplicate args. */
#define SHORT_OPT_COL 2 /* column in which short options start */
#define LONG_OPT_COL 6 /* column in which long options start */
#define DOC_OPT_COL 2 /* column in which doc options start */
@@ -53,6 +64,146 @@
#define USAGE_INDENT 12 /* indentation of wrapped usage lines */
#define RMARGIN 79 /* right margin used for wrapping */
+/* User-selectable (using an environment variable) formatting parameters.
+ They must all be of type `int' for the parsing code to work. */
+struct uparams
+{
+ /* If true, arguments for an option are shown with both short and long
+ options, even when a given option has both, e.g. `-x ARG, --longx=ARG'.
+ If false, then if an option has both, the argument is only shown with
+ the long one, e.g., `-x, --longx=ARG', and a message indicating that
+ this really means both is printed below the options. */
+ int dup_args;
+
+ /* This is true if when DUP_ARGS is false, and some duplicate arguments have
+ been suppressed, an explanatory message should be printed. */
+ int dup_args_note;
+
+ /* Various output columns. */
+ int short_opt_col;
+ int long_opt_col;
+ int doc_opt_col;
+ int opt_doc_col;
+ int header_col;
+ int usage_indent;
+ int rmargin;
+
+ int valid; /* True when the values in here are valid. */
+};
+
+/* This is a global variable, as user options are only ever read once. */
+static struct uparams uparams = {
+ DUP_ARGS, DUP_ARGS_NOTE,
+ SHORT_OPT_COL, LONG_OPT_COL, DOC_OPT_COL, OPT_DOC_COL, HEADER_COL,
+ USAGE_INDENT, RMARGIN,
+ 0
+};
+
+/* A particular uparam, and what the user name is. */
+struct uparam_name
+{
+ const char *name; /* User name. */
+ int is_bool; /* Whether it's `boolean'. */
+ size_t uparams_offs; /* Location of the (int) field in UPARAMS. */
+};
+
+/* The name-field mappings we know about. */
+static const struct uparam_name uparam_names[] =
+{
+ { "dup-args", 1, offsetof (struct uparams, dup_args) },
+ { "dup-args-note", 1, offsetof (struct uparams, dup_args_note) },
+ { "short-opt-col", 0, offsetof (struct uparams, short_opt_col) },
+ { "long-opt-col", 0, offsetof (struct uparams, long_opt_col) },
+ { "doc-opt-col", 0, offsetof (struct uparams, doc_opt_col) },
+ { "opt-doc-col", 0, offsetof (struct uparams, opt_doc_col) },
+ { "header-col", 0, offsetof (struct uparams, header_col) },
+ { "usage-indent", 0, offsetof (struct uparams, usage_indent) },
+ { "rmargin", 0, offsetof (struct uparams, rmargin) },
+ { 0 }
+};
+
+/* Read user options from the environment, and fill in UPARAMS appropiately. */
+static void
+fill_in_uparams (const struct argp_state *state)
+{
+ const char *var = getenv ("ARGP_HELP_FMT");
+
+#define SKIPWS(p) do { while (isspace (*p)) p++; } while (0);
+
+ if (var)
+ /* Parse var. */
+ while (*var)
+ {
+ SKIPWS (var);
+
+ if (isalpha (*var))
+ {
+ size_t var_len;
+ const struct uparam_name *un;
+ int unspec = 0, val = 0;
+ const char *arg = var;
+
+ while (isalnum (*arg) || *arg == '-' || *arg == '_')
+ arg++;
+ var_len = arg - var;
+
+ SKIPWS (arg);
+
+ if (*arg == '\0' || *arg == ',')
+ unspec = 1;
+ else if (*arg == '=')
+ {
+ arg++;
+ SKIPWS (arg);
+ }
+
+ if (unspec)
+ if (var[0] == 'n' && var[1] == 'o' && var[2] == '-')
+ {
+ val = 0;
+ var += 3;
+ var_len -= 3;
+ }
+ else
+ val = 1;
+ else if (isdigit (*arg))
+ {
+ val = atoi (arg);
+ while (isdigit (*arg))
+ arg++;
+ SKIPWS (arg);
+ }
+
+ for (un = uparam_names; un->name; un++)
+ if (strlen (un->name) == var_len
+ && strncmp (var, un->name, var_len) == 0)
+ {
+ if (unspec && !un->is_bool)
+ __argp_failure (state, 0, 0,
+ _("%.*s: ARGP_HELP_FMT parameter requires a value"),
+ (int)var_len, var);
+ else
+ *(int *)((char *)&uparams + un->uparams_offs) = val;
+ break;
+ }
+ if (! un->name)
+ __argp_failure (state, 0, 0,
+ _("%.*s: Unknown ARGP_HELP_FMT parameter"),
+ (int)var_len, var);
+
+ var = arg;
+ if (*var == ',')
+ var++;
+ }
+ else if (*var)
+ {
+ __argp_failure (state, 0, 0,
+ _("Garbage in ARGP_HELP_FMT: %s"), var);
+ break;
+ }
+ }
+}
+
/* Returns true if OPT hasn't been marked invisible. Visibility only affects
whether OPT is displayed or used in sorting, not option shadowing. */
#define ovisible(opt) (! ((opt)->flags & OPTION_HIDDEN))
@@ -719,13 +870,28 @@ arg (const struct argp_option *real, const char *req_fmt, const char *opt_fmt,
{
if (real->arg)
if (real->flags & OPTION_ARG_OPTIONAL)
- __argp_fmtstream_printf (stream, opt_fmt, _(real->arg));
+ __argp_fmtstream_printf (stream, opt_fmt, gettext (real->arg));
else
- __argp_fmtstream_printf (stream, req_fmt, _(real->arg));
+ __argp_fmtstream_printf (stream, req_fmt, gettext (real->arg));
}
/* Helper functions for hol_entry_help. */
+/* State used during the execution of hol_help. */
+struct hol_help_state
+{
+ /* PREV_ENTRY should contain the previous entry printed, or 0. */
+ struct hol_entry *prev_entry;
+
+ /* If an entry is in a different group from the previous one, and SEP_GROUPS
+ is true, then a blank line will be printed before any output. */
+ int sep_groups;
+
+ /* True if a duplicate option argument was suppressed (only ever set if
+ UPARAMS.dup_args is false). */
+ int suppressed_dup_arg;
+};
+
/* Some state used while printing a help entry (used to communicate with
helper functions). See the doc for hol_entry_help for more info, as most
of the fields are copied from its arguments. */
@@ -733,8 +899,7 @@ struct pentry_state
{
const struct hol_entry *entry;
argp_fmtstream_t stream;
- struct hol_entry **prev_entry;
- int *sep_groups;
+ struct hol_help_state *hhstate;
/* True if nothing's been printed so far. */
int first;
@@ -746,12 +911,12 @@ struct pentry_state
/* If a user doc filter should be applied to DOC, do so. */
static const char *
filter_doc (const char *doc, int key, const struct argp *argp,
- struct pentry_state *pest)
+ const struct argp_state *state)
{
if (argp->help_filter)
/* We must apply a user filter to this output. */
{
- void *input = __argp_input (argp, pest->state);
+ void *input = __argp_input (argp, state);
<