summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2014-10-11 23:04:04 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2014-10-11 23:04:04 +0200
commit9be540c23830a31c22d123a14c513f2a247a6781 (patch)
treeb91728603e0720969fddd326ad9acdcc8b569e25 /src
parenta27c20c45e03c3335d080f056835cd6d2f05bf01 (diff)
downloadgnutls-9be540c23830a31c22d123a14c513f2a247a6781.tar.gz
updated to libopts 5.18.4
Diffstat (limited to 'src')
-rw-r--r--src/libopts/Makefile.am58
-rw-r--r--src/libopts/ag-char-map.h2
-rw-r--r--src/libopts/ao-strs.c2
-rw-r--r--src/libopts/ao-strs.h2
-rw-r--r--src/libopts/autoopts.h9
-rw-r--r--src/libopts/autoopts/options.h35
-rw-r--r--src/libopts/autoopts/usage-txt.h2
-rw-r--r--src/libopts/compat/_Noreturn.h10
-rw-r--r--src/libopts/genshell.c4
-rw-r--r--src/libopts/genshell.h6
-rw-r--r--src/libopts/intprops.h320
-rw-r--r--src/libopts/m4/libopts.m43
-rw-r--r--src/libopts/m4/stdnoreturn.m441
-rw-r--r--src/libopts/option-value-type.c2
-rw-r--r--src/libopts/option-value-type.h2
-rw-r--r--src/libopts/option-xat-attribute.c2
-rw-r--r--src/libopts/option-xat-attribute.h2
-rw-r--r--src/libopts/parse-duration.c9
-rw-r--r--src/libopts/proto.h2
-rw-r--r--src/libopts/stdnoreturn.in.h50
-rw-r--r--src/libopts/version.c28
21 files changed, 536 insertions, 55 deletions
diff --git a/src/libopts/Makefile.am b/src/libopts/Makefile.am
index 61706df1c4..5dc5a30c76 100644
--- a/src/libopts/Makefile.am
+++ b/src/libopts/Makefile.am
@@ -6,25 +6,47 @@ noinst_LTLIBRARIES = libopts.la
libopts_la_SOURCES = libopts.c
libopts_la_CPPFLAGS = -I$(top_srcdir)
libopts_la_LIBADD = $(LTLIBINTL)
+EXTRA_DIST =
+BUILT_SOURCES =
+MOSTLYCLEANFILES =
+
++_NORETURN_H=$(srcdir)/compat/_Noreturn.h
+EXTRA_DIST += $(srcdir)/compat/_Noreturn.h
+BUILT_SOURCES += $(STDNORETURN_H)
+if GL_GENERATE_STDNORETURN_H
+stdnoreturn.h: stdnoreturn.in.h $(top_builddir)/config.status $(_NORETURN_H)
+ $(AM_V_GEN)rm -f $@-t $@ && \
+ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+ sed -e '/definition of _Noreturn/r $(_NORETURN_H)' \
+ < $(srcdir)/stdnoreturn.in.h; \
+ } > $@-t && \
+ mv $@-t $@
+else
+stdnoreturn.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+MOSTLYCLEANFILES += stdnoreturn.h stdnoreturn.h-t
+EXTRA_DIST += stdnoreturn.in.h
-EXTRA_DIST = \
- ag-char-map.h alias.c ao-strs.c \
- ao-strs.h autoopts/options.h autoopts/usage-txt.h \
- autoopts/project.h autoopts.c autoopts.h \
- boolean.c check.c compat/strdup.c \
- compat/strchr.c compat/snprintf.c compat/compat.h \
- compat/pathfind.c compat/windows-config.h configfile.c \
- cook.c COPYING.gplv3 COPYING.lgplv3 \
- COPYING.mbsd enum.c env.c \
+EXTRA_DIST += \
+ COPYING.gplv3 COPYING.lgplv3 COPYING.mbsd \
+ MakeDefs.inc README ag-char-map.h \
+ alias.c ao-strs.c ao-strs.h \
+ autoopts/options.h autoopts/project.h autoopts/usage-txt.h \
+ autoopts.c autoopts.h boolean.c \
+ check.c compat/strdup.c compat/snprintf.c \
+ compat/compat.h compat/_Noreturn.h compat/pathfind.c \
+ compat/windows-config.h compat/strchr.c configfile.c \
+ cook.c enum.c env.c \
file.c find.c genshell.c \
genshell.h gettext.h init.c \
- load.c m4/liboptschk.m4 m4/libopts.m4 \
- MakeDefs.inc makeshell.c nested.c \
- numeric.c option-value-type.c option-value-type.h \
- option-xat-attribute.c option-xat-attribute.h parse-duration.c \
- parse-duration.h pgusage.c proto.h \
- putshell.c README reset.c \
+ intprops.h load.c m4/libopts.m4 \
+ m4/liboptschk.m4 m4/stdnoreturn.m4 makeshell.c \
+ nested.c numeric.c option-value-type.c \
+ option-value-type.h option-xat-attribute.c option-xat-attribute.h \
+ parse-duration.c parse-duration.h pgusage.c \
+ proto.h putshell.c reset.c \
restore.c save.c sort.c \
- stack.c streqvcmp.c text_mmap.c \
- time.c tokenize.c usage.c \
- version.c
+ stack.c stdnoreturn.in.h streqvcmp.c \
+ text_mmap.c time.c tokenize.c \
+ usage.c version.c
diff --git a/src/libopts/ag-char-map.h b/src/libopts/ag-char-map.h
index 45235b9fe4..d50e66511b 100644
--- a/src/libopts/ag-char-map.h
+++ b/src/libopts/ag-char-map.h
@@ -1,6 +1,6 @@
/*
* 29 bits for 46 character classifications
- * generated by char-mapper on 05/17/14 at 07:49:44
+ * generated by char-mapper on 08/30/14 at 10:36:23
*
* This file contains the character classifications
* used by AutoGen and AutoOpts for identifying tokens.
diff --git a/src/libopts/ao-strs.c b/src/libopts/ao-strs.c
index c4c5fe3b56..c385a4d340 100644
--- a/src/libopts/ao-strs.c
+++ b/src/libopts/ao-strs.c
@@ -2,7 +2,7 @@
*
* DO NOT EDIT THIS FILE (ao-strs.c)
*
- * It has been AutoGen-ed May 17, 2014 at 07:49:44 AM by AutoGen 5.18.3
+ * It has been AutoGen-ed
* From the definitions ao-strs.def
* and the template file strings
*
diff --git a/src/libopts/ao-strs.h b/src/libopts/ao-strs.h
index e7bbc0aa75..812186a879 100644
--- a/src/libopts/ao-strs.h
+++ b/src/libopts/ao-strs.h
@@ -2,7 +2,7 @@
*
* DO NOT EDIT THIS FILE (ao-strs.h)
*
- * It has been AutoGen-ed May 17, 2014 at 07:49:44 AM by AutoGen 5.18.3
+ * It has been AutoGen-ed
* From the definitions ao-strs.def
* and the template file strings
*
diff --git a/src/libopts/autoopts.h b/src/libopts/autoopts.h
index 634a60c36b..27a907c35c 100644
--- a/src/libopts/autoopts.h
+++ b/src/libopts/autoopts.h
@@ -32,14 +32,7 @@
#ifndef AUTOGEN_AUTOOPTS_H
#define AUTOGEN_AUTOOPTS_H
-
-#ifdef HAVE_STDNORETURN_H
-# include <stdnoreturn.h>
-#else
-# ifndef noreturn
-# define noreturn
-# endif
-#endif
+#include <stdnoreturn.h>
#define AO_NAME_LIMIT 127
#define AO_NAME_SIZE ((size_t)(AO_NAME_LIMIT + 1))
diff --git a/src/libopts/autoopts/options.h b/src/libopts/autoopts/options.h
index 3418b7ea4f..6a5c9e5978 100644
--- a/src/libopts/autoopts/options.h
+++ b/src/libopts/autoopts/options.h
@@ -2,7 +2,7 @@
*
* DO NOT EDIT THIS FILE (options.h)
*
- * It has been AutoGen-ed May 17, 2014 at 07:49:51 AM by AutoGen 5.18.3
+ * It has been AutoGen-ed
* From the definitions funcs.def
* and the template file options_h
*
@@ -101,15 +101,15 @@
* @{
*/
/// autoopts structure version
-#define OPTIONS_STRUCT_VERSION 163842
+#define OPTIONS_STRUCT_VERSION 167936
/// autoopts structure version string
-#define OPTIONS_VERSION_STRING "40:2:15"
+#define OPTIONS_VERSION_STRING "41:0:16"
/// minimum version the autoopts library supports
#define OPTIONS_MINIMUM_VERSION 102400
/// minimum version the autoopts library supports as a string
#define OPTIONS_MIN_VER_STRING "25:0:0"
/// the display version of the autoopts library, as a string
-#define OPTIONS_DOTTED_VERSION "40.2"
+#define OPTIONS_DOTTED_VERSION "41.0"
/// convert a version/release number pair to an integer value
#define OPTIONS_VER_TO_NUM(_v, _r) (((_v) * 4096) + (_r))
/// @}
@@ -958,6 +958,31 @@ extern void optionOnlyUsage(tOptions*, int);
/**
+ * optionPrintVersion - Print the program version
+ *
+ * This routine will print the version to stdout.
+ *
+ * @param opts program options descriptor
+ * @param od the descriptor for this arg
+ */
+extern void optionPrintVersion(tOptions*, tOptDesc*);
+
+
+/**
+ * optionPrintVersionAndReturn - Print the program version
+ *
+ * This routine will print the version to stdout and return
+ * instead of exiting. Please see the source for the
+ * @code{print_ver} funtion for details on selecting how
+ * verbose to be after this function returns.
+ *
+ * @param opts program options descriptor
+ * @param od the descriptor for this arg
+ */
+extern void optionPrintVersionAndReturn(tOptions*, tOptDesc*);
+
+
+/**
* optionProcess - this is the main option processing routine
*
* This is the main entry point for processing options. It is intended
@@ -1189,8 +1214,6 @@ extern void optionParseShell(tOptions*);
extern void optionPrintParagraphs(char const *, bool, FILE *);
-extern void optionPrintVersion(tOptions*, tOptDesc*);
-
extern void optionPutShell(tOptions*);
extern char const * optionQuoteString(char const *, char const *);
diff --git a/src/libopts/autoopts/usage-txt.h b/src/libopts/autoopts/usage-txt.h
index 9ef5d7f079..0307a3172c 100644
--- a/src/libopts/autoopts/usage-txt.h
+++ b/src/libopts/autoopts/usage-txt.h
@@ -2,7 +2,7 @@
*
* DO NOT EDIT THIS FILE (usage-txt.h)
*
- * It has been AutoGen-ed May 17, 2014 at 07:49:49 AM by AutoGen 5.18.3
+ * It has been AutoGen-ed
* From the definitions usage-txt.def
* and the template file usage-txt.tpl
*
diff --git a/src/libopts/compat/_Noreturn.h b/src/libopts/compat/_Noreturn.h
new file mode 100644
index 0000000000..c44ad89b7c
--- /dev/null
+++ b/src/libopts/compat/_Noreturn.h
@@ -0,0 +1,10 @@
+#if !defined _Noreturn && __STDC_VERSION__ < 201112
+# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+ || 0x5110 <= __SUNPRO_C)
+# define _Noreturn __attribute__ ((__noreturn__))
+# elif 1200 <= _MSC_VER
+# define _Noreturn __declspec (noreturn)
+# else
+# define _Noreturn
+# endif
+#endif
diff --git a/src/libopts/genshell.c b/src/libopts/genshell.c
index 79bb5a9ffc..20e6c15c9f 100644
--- a/src/libopts/genshell.c
+++ b/src/libopts/genshell.c
@@ -2,11 +2,11 @@
*
* DO NOT EDIT THIS FILE (genshell.c)
*
- * It has been AutoGen-ed May 17, 2014 at 07:49:48 AM by AutoGen 5.18.3
+ * It has been AutoGen-ed
* From the definitions genshell.def
* and the template file options
*
- * Generated from AutoOpts 40:2:15 templates.
+ * Generated from AutoOpts 41:0:16 templates.
*
* AutoOpts is a copyrighted work. This source file is not encumbered
* by AutoOpts licensing, but is provided under the licensing terms chosen
diff --git a/src/libopts/genshell.h b/src/libopts/genshell.h
index 3a24e46f8f..1c18735741 100644
--- a/src/libopts/genshell.h
+++ b/src/libopts/genshell.h
@@ -2,11 +2,11 @@
*
* DO NOT EDIT THIS FILE (genshell.h)
*
- * It has been AutoGen-ed May 17, 2014 at 07:49:48 AM by AutoGen 5.18.3
+ * It has been AutoGen-ed
* From the definitions genshell.def
* and the template file options
*
- * Generated from AutoOpts 40:2:15 templates.
+ * Generated from AutoOpts 41:0:16 templates.
*
* AutoOpts is a copyrighted work. This header file is not encumbered
* by AutoOpts licensing, but is provided under the licensing terms chosen
@@ -55,7 +55,7 @@
* tolerable version is at least as old as what was current when the header
* template was released.
*/
-#define AO_TEMPLATE_VERSION 163842
+#define AO_TEMPLATE_VERSION 167936
#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \
|| (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION)
# error option template version mismatches autoopts/options.h header
diff --git a/src/libopts/intprops.h b/src/libopts/intprops.h
new file mode 100644
index 0000000000..6936ad572f
--- /dev/null
+++ b/src/libopts/intprops.h
@@ -0,0 +1,320 @@
+/* intprops.h -- properties of integer types
+
+ Copyright (C) 2001-2005, 2009-2014 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Written by Paul Eggert. */
+
+#ifndef _GL_INTPROPS_H
+#define _GL_INTPROPS_H
+
+#include <limits.h>
+
+/* Return an integer value, converted to the same type as the integer
+ expression E after integer type promotion. V is the unconverted value. */
+#define _GL_INT_CONVERT(e, v) (0 * (e) + (v))
+
+/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see
+ <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00406.html>. */
+#define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v))
+
+/* The extra casts in the following macros work around compiler bugs,
+ e.g., in Cray C 5.0.3.0. */
+
+/* True if the arithmetic type T is an integer type. bool counts as
+ an integer. */
+#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
+
+/* True if negative values of the signed integer type T use two's
+ complement, ones' complement, or signed magnitude representation,
+ respectively. Much GNU code assumes two's complement, but some
+ people like to be portable to all possible C hosts. */
+#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
+#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
+#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
+
+/* True if the signed integer expression E uses two's complement. */
+#define _GL_INT_TWOS_COMPLEMENT(e) (~ _GL_INT_CONVERT (e, 0) == -1)
+
+/* True if the arithmetic type T is signed. */
+#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+
+/* Return 1 if the integer expression E, after integer promotion, has
+ a signed type. */
+#define _GL_INT_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0)
+
+
+/* Minimum and maximum values for integer types and expressions. These
+ macros have undefined behavior if T is signed and has padding bits.
+ If this is a problem for you, please let us know how to fix it for
+ your host. */
+
+/* The maximum and minimum values for the integer type T. */
+#define TYPE_MINIMUM(t) \
+ ((t) (! TYPE_SIGNED (t) \
+ ? (t) 0 \
+ : TYPE_SIGNED_MAGNITUDE (t) \
+ ? ~ (t) 0 \
+ : ~ TYPE_MAXIMUM (t)))
+#define TYPE_MAXIMUM(t) \
+ ((t) (! TYPE_SIGNED (t) \
+ ? (t) -1 \
+ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+
+/* The maximum and minimum values for the type of the expression E,
+ after integer promotion. E should not have side effects. */
+#define _GL_INT_MINIMUM(e) \
+ (_GL_INT_SIGNED (e) \
+ ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e) \
+ : _GL_INT_CONVERT (e, 0))
+#define _GL_INT_MAXIMUM(e) \
+ (_GL_INT_SIGNED (e) \
+ ? _GL_SIGNED_INT_MAXIMUM (e) \
+ : _GL_INT_NEGATE_CONVERT (e, 1))
+#define _GL_SIGNED_INT_MAXIMUM(e) \
+ (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1)
+
+
+/* Return 1 if the __typeof__ keyword works. This could be done by
+ 'configure', but for now it's easier to do it by hand. */
+#if (2 <= __GNUC__ || defined __IBM__TYPEOF__ \
+ || (0x5110 <= __SUNPRO_C && !__STDC__))
+# define _GL_HAVE___TYPEOF__ 1
+#else
+# define _GL_HAVE___TYPEOF__ 0
+#endif
+
+/* Return 1 if the integer type or expression T might be signed. Return 0
+ if it is definitely unsigned. This macro does not evaluate its argument,
+ and expands to an integer constant expression. */
+#if _GL_HAVE___TYPEOF__
+# define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t))
+#else
+# define _GL_SIGNED_TYPE_OR_EXPR(t) 1
+#endif
+
+/* Bound on length of the string representing an unsigned integer
+ value representable in B bits. log10 (2.0) < 146/485. The
+ smallest value of B where this bound is not tight is 2621. */
+#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485)
+
+/* Bound on length of the string representing an integer type or expression T.
+ Subtract 1 for the sign bit if T is signed, and then add 1 more for
+ a minus sign if needed.
+
+ Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is
+ signed, this macro may overestimate the true bound by one byte when
+ applied to unsigned types of size 2, 4, 16, ... bytes. */
+#define INT_STRLEN_BOUND(t) \
+ (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT \
+ - _GL_SIGNED_TYPE_OR_EXPR (t)) \
+ + _GL_SIGNED_TYPE_OR_EXPR (t))
+
+/* Bound on buffer size needed to represent an integer type or expression T,
+ including the terminating null. */
+#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
+
+
+/* Range overflow checks.
+
+ The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C
+ operators might not yield numerically correct answers due to
+ arithmetic overflow. They do not rely on undefined or
+ implementation-defined behavior. Their implementations are simple
+ and straightforward, but they are a bit harder to use than the
+ INT_<op>_OVERFLOW macros described below.
+
+ Example usage:
+
+ long int i = ...;
+ long int j = ...;
+ if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX))
+ printf ("multiply would overflow");
+ else
+ printf ("product is %ld", i * j);
+
+ Restrictions on *_RANGE_OVERFLOW macros:
+
+ These macros do not check for all possible numerical problems or
+ undefined or unspecified behavior: they do not check for division
+ by zero, for bad shift counts, or for shifting negative numbers.
+
+ These macros may evaluate their arguments zero or multiple times,
+ so the arguments should not have side effects. The arithmetic
+ arguments (including the MIN and MAX arguments) must be of the same
+ integer type after the usual arithmetic conversions, and the type
+ must have minimum value MIN and maximum MAX. Unsigned types should
+ use a zero MIN of the proper type.
+
+ These macros are tuned for constant MIN and MAX. For commutative
+ operations such as A + B, they are also tuned for constant B. */
+
+/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. */
+#define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \
+ ((b) < 0 \
+ ? (a) < (min) - (b) \
+ : (max) - (b) < (a))
+
+/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. */
+#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \
+ ((b) < 0 \
+ ? (max) + (b) < (a) \
+ : (a) < (min) + (b))
+
+/* Return 1 if - A would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. */
+#define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \
+ ((min) < 0 \
+ ? (a) < - (max) \
+ : 0 < (a))
+
+/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. Avoid && and || as they tickle
+ bugs in Sun C 5.11 2010/08/13 and other compilers; see
+ <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00401.html>. */
+#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \
+ ((b) < 0 \
+ ? ((a) < 0 \
+ ? (a) < (max) / (b) \
+ : (b) == -1 \
+ ? 0 \
+ : (min) / (b) < (a)) \
+ : (b) == 0 \
+ ? 0 \
+ : ((a) < 0 \
+ ? (a) < (min) / (b) \
+ : (max) / (b) < (a)))
+
+/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. Do not check for division by zero. */
+#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \
+ ((min) < 0 && (b) == -1 && (a) < - (max))
+
+/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. Do not check for division by zero.
+ Mathematically, % should never overflow, but on x86-like hosts
+ INT_MIN % -1 traps, and the C standard permits this, so treat this
+ as an overflow too. */
+#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \
+ INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max)
+
+/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. Here, MIN and MAX are for A only, and B need
+ not be of the same type as the other arguments. The C standard says that
+ behavior is undefined for shifts unless 0 <= B < wordwidth, and that when
+ A is negative then A << B has undefined behavior and A >> B has
+ implementation-defined behavior, but do not check these other
+ restrictions. */
+#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \
+ ((a) < 0 \
+ ? (a) < (min) >> (b) \
+ : (max) >> (b) < (a))
+
+
+/* The _GL*_OVERFLOW macros have the same restrictions as the
+ *_RANGE_OVERFLOW macros, except that they do not assume that operands
+ (e.g., A and B) have the same type as MIN and MAX. Instead, they assume
+ that the result (e.g., A + B) has that type. */
+#define _GL_ADD_OVERFLOW(a, b, min, max) \
+ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \
+ : (a) < 0 ? (b) <= (a) + (b) \
+ : (b) < 0 ? (a) <= (a) + (b) \
+ : (a) + (b) < (b))
+#define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \
+ ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \
+ : (a) < 0 ? 1 \
+ : (b) < 0 ? (a) - (b) <= (a) \
+ : (a) < (b))
+#define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \
+ (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \
+ || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max))
+#define _GL_DIVIDE_OVERFLOW(a, b, min, max) \
+ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \
+ : (a) < 0 ? (b) <= (a) + (b) - 1 \
+ : (b) < 0 && (a) + (b) <= (a))
+#define _GL_REMAINDER_OVERFLOW(a, b, min, max) \
+ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \
+ : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \
+ : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max))
+
+/* Return a nonzero value if A is a mathematical multiple of B, where
+ A is unsigned, B is negative, and MAX is the maximum value of A's
+ type. A's type must be the same as (A % B)'s type. Normally (A %
+ -B == 0) suffices, but things get tricky if -B would overflow. */
+#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \
+ (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \
+ ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \
+ ? (a) \
+ : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \
+ : (a) % - (b)) \
+ == 0)
+
+
+/* Integer overflow checks.
+
+ The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators
+ might not yield numerically correct answers due to arithmetic overflow.
+ They work correctly on all known practical hosts, and do not rely
+ on undefined behavior due to signed arithmetic overflow.
+
+ Example usage:
+
+ long int i = ...;
+ long int j = ...;
+ if (INT_MULTIPLY_OVERFLOW (i, j))
+ printf ("multiply would overflow");
+ else
+ printf ("product is %ld", i * j);
+
+ These macros do not check for all possible numerical problems or
+ undefined or unspecified behavior: they do not check for division
+ by zero, for bad shift counts, or for shifting negative numbers.
+
+ These macros may evaluate their arguments zero or multiple times, so the
+ arguments should not have side effects.
+
+ These macros are tuned for their last argument being a constant.
+
+ Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B,
+ A % B, and A << B would overflow, respectively. */
+
+#define INT_ADD_OVERFLOW(a, b) \
+ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW)
+#define INT_SUBTRACT_OVERFLOW(a, b) \
+ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW)
+#define INT_NEGATE_OVERFLOW(a) \
+ INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
+#define INT_MULTIPLY_OVERFLOW(a, b) \
+ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW)
+#define INT_DIVIDE_OVERFLOW(a, b) \
+ _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW)
+#define INT_REMAINDER_OVERFLOW(a, b) \
+ _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW)
+#define INT_LEFT_SHIFT_OVERFLOW(a, b) \
+ INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \
+ _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
+
+/* Return 1 if the expression A <op> B would overflow,
+ where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test,
+ assuming MIN and MAX are the minimum and maximum for the result type.
+ Arguments should be free of side effects. */
+#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \
+ op_result_overflow (a, b, \
+ _GL_INT_MINIMUM (0 * (b) + (a)), \
+ _GL_INT_MAXIMUM (0 * (b) + (a)))
+
+#endif /* _GL_INTPROPS_H */
diff --git a/src/libopts/m4/libopts.m4 b/src/libopts/m4/libopts.m4
index 7f2a9bb877..1f3b3cec96 100644
--- a/src/libopts/m4/libopts.m4
+++ b/src/libopts/m4/libopts.m4
@@ -2,7 +2,7 @@ dnl -*- buffer-read-only: t -*- vi: set ro:
dnl
dnl DO NOT EDIT THIS FILE (libopts.m4)
dnl
-dnl It has been AutoGen-ed May 17, 2014 at 07:49:39 AM by AutoGen 5.18.3
+dnl It has been AutoGen-ed
dnl From the definitions libopts.def
dnl and the template file conftest.tpl
dnl
@@ -38,6 +38,7 @@ AC_DEFUN([INVOKE_LIBOPTS_MACROS_FIRST],[
AC_CHECK_HEADERS([inttypes.h stdint.h],
[lo_have_typ_hdr=true;break],
[lo_have_typ_hdr=false])
+ gl_STDNORETURN_H
# ----------------------------------------------------------------------
# check for various programs used during the build.
diff --git a/src/libopts/m4/stdnoreturn.m4 b/src/libopts/m4/stdnoreturn.m4
new file mode 100644
index 0000000000..eea2c1e21d
--- /dev/null
+++ b/src/libopts/m4/stdnoreturn.m4
@@ -0,0 +1,41 @@
+# Check for stdnoreturn.h that conforms to C11.
+
+dnl Copyright 2012-2014 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Prepare for substituting <stdnoreturn.h> if it is not supported.
+
+AC_DEFUN([gl_STDNORETURN_H],
+[
+ AC_CACHE_CHECK([for working stdnoreturn.h],
+ [gl_cv_header_working_stdnoreturn_h],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdlib.h>
+ #include <stdnoreturn.h>
+ /* Do not check for 'noreturn' after the return type.
+ C11 allows it, but it's rarely done that way
+ and circa-2012 bleeding-edge GCC rejects it when given
+ -Werror=old-style-declaration. */
+ noreturn void foo1 (void) { exit (0); }
+ _Noreturn void foo2 (void) { exit (0); }
+ int testit (int argc, char **argv) {
+ if (argc & 1)
+ return 0;
+ (argv[0][0] ? foo1 : foo2) ();
+ }
+ ]])],
+ [gl_cv_header_working_stdnoreturn_h=yes],
+ [gl_cv_header_working_stdnoreturn_h=no])])
+
+ if test $gl_cv_header_working_stdnoreturn_h = yes; then
+ STDNORETURN_H=''
+ else
+ STDNORETURN_H='stdnoreturn.h'
+ fi
+
+ AC_SUBST([STDNORETURN_H])
+ AM_CONDITIONAL([GL_GENERATE_STDNORETURN_H], [test -n "$STDNORETURN_H"])
+])
diff --git a/src/libopts/option-value-type.c b/src/libopts/option-value-type.c
index 68370da9bc..e4b4ea108e 100644
--- a/src/libopts/option-value-type.c
+++ b/src/libopts/option-value-type.c
@@ -2,7 +2,7 @@
*
* DO NOT EDIT THIS FILE (stdin.c)
*
- * It has been AutoGen-ed May 17, 2014 at 07:49:46 AM by AutoGen 5.18.3
+ * It has been AutoGen-ed
* From the definitions stdin
* and the template file str2enum
*
diff --git a/src/libopts/option-value-type.h b/src/libopts/option-value-type.h
index 4688f7a55b..cf6dcaadb8 100644
--- a/src/libopts/option-value-type.h
+++ b/src/libopts/option-value-type.h
@@ -2,7 +2,7 @@
*
* DO NOT EDIT THIS FILE (stdin.h)
*
- * It has been AutoGen-ed May 17, 2014 at 07:49:46 AM by AutoGen 5.18.3
+ * It has been AutoGen-ed
* From the definitions stdin
* and the template file str2enum
*
diff --git a/src/libopts/option-xat-attribute.c b/src/libopts/option-xat-attribute.c
index c97bf5edc4..0fffd3059b 100644
--- a/src/libopts/option-xat-attribute.c
+++ b/src/libopts/option-xat-attribute.c
@@ -2,7 +2,7 @@
*
* DO NOT EDIT THIS FILE (stdin.c)
*
- * It has been AutoGen-ed May 17, 2014 at 07:49:45 AM by AutoGen 5.18.3
+ * It has been AutoGen-ed
* From the definitions stdin
* and the template file str2enum
*
diff --git a/src/libopts/option-xat-attribute.h b/src/libopts/option-xat-attribute.h
index b260c7bf87..dde1617a44 100644
--- a/src/libopts/option-xat-attribute.h
+++ b/src/libopts/option-xat-attribute.h
@@ -2,7 +2,7 @@
*
* DO NOT EDIT THIS FILE (stdin.h)
*
- * It has been AutoGen-ed May 17, 2014 at 07:49:45 AM by AutoGen 5.18.3
+ * It has been AutoGen-ed
* From the definitions stdin
* and the template file str2enum
*
diff --git a/src/libopts/parse-duration.c b/src/libopts/parse-duration.c
index 9efd881f62..ff3fe4228f 100644
--- a/src/libopts/parse-duration.c
+++ b/src/libopts/parse-duration.c
@@ -27,6 +27,8 @@
#include <stdlib.h>
#include <string.h>
+#include "intprops.h"
+
#ifndef NUL
#define NUL '\0'
#endif
@@ -51,7 +53,8 @@ typedef enum {
#define SEC_PER_MONTH (SEC_PER_DAY * 30)
#define SEC_PER_YEAR (SEC_PER_DAY * 365)
-#define TIME_MAX 0x7FFFFFFF
+#undef MAX_DURATION
+#define MAX_DURATION TYPE_MAXIMUM(time_t)
/* Wrapper around strtoul that does not require a cast. */
static unsigned long
@@ -80,14 +83,14 @@ scale_n_add (time_t base, time_t val, int scale)
return BAD_TIME;
}
- if (val > TIME_MAX / scale)
+ if (val > MAX_DURATION / scale)
{
errno = ERANGE;
return BAD_TIME;
}
val *= scale;
- if (base > TIME_MAX - val)
+ if (base > MAX_DURATION - val)
{
errno = ERANGE;
return BAD_TIME;
diff --git a/src/libopts/proto.h b/src/libopts/proto.h
index 8745b3c5f8..591999fce5 100644
--- a/src/libopts/proto.h
+++ b/src/libopts/proto.h
@@ -1,7 +1,7 @@
/* -*- buffer-read-only: t -*- vi: set ro:
*
* Prototypes for autoopts
- * Generated Sat May 17 07:49:59 PDT 2014
+ * Generated Sat Aug 30 10:36:38 PDT 2014
*/
#ifndef AUTOOPTS_PROTO_H_GUARD
#define AUTOOPTS_PROTO_H_GUARD 1
diff --git a/src/libopts/stdnoreturn.in.h b/src/libopts/stdnoreturn.in.h
new file mode 100644
index 0000000000..d4ae183ce6
--- /dev/null
+++ b/src/libopts/stdnoreturn.in.h
@@ -0,0 +1,50 @@
+/* A substitute for ISO C11 <stdnoreturn.h>.
+
+ Copyright 2012-2014 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>. */
+
+/* Written by Paul Eggert. */
+
+#ifndef noreturn
+
+/* ISO C11 <stdnoreturn.h> for platforms that lack it.
+
+ References:
+ ISO C11 (latest free draft
+ <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf>)
+ section 7.23 */
+
+/* The definition of _Noreturn is copied here. */
+
+#if 1200 <= _MSC_VER
+/* Standard include files on this platform contain declarations like
+ "__declspec (noreturn) void abort (void);". "#define noreturn
+ _Noreturn" would cause this declaration to be rewritten to the
+ invalid "__declspec (__declspec (noreturn)) void abort (void);".
+ Instead, define noreturn to empty, so that such declarations are
+ rewritten to "__declspec () void abort (void);", which is
+ equivalent to "void abort (void);"; this gives up on noreturn's
+ advice to the compiler but at least it is valid code. */
+# define noreturn /*empty*/
+#else
+# define noreturn _Noreturn
+#endif
+
+/* Did he ever return?
+ No he never returned
+ And his fate is still unlearn'd ...
+ -- Steiner J, Hawes BL. M.T.A. (1949) */
+
+#endif /* noreturn */
diff --git a/src/libopts/version.c b/src/libopts/version.c
index 3aaa288297..1516c147f8 100644
--- a/src/libopts/version.c
+++ b/src/libopts/version.c
@@ -135,7 +135,7 @@ emit_copy_note(tOptions * opts, FILE * fp)
* is being requested and select the correct printing routine.
*/
static void
-print_ver(tOptions * opts, tOptDesc * od, FILE * fp)
+print_ver(tOptions * opts, tOptDesc * od, FILE * fp, bool call_exit)
{
char ch;
@@ -174,11 +174,11 @@ print_ver(tOptions * opts, tOptDesc * od, FILE * fp)
fserr_exit(opts->pzProgName, zwriting,
(fp == stdout) ? zstdout_name : zstderr_name);
- option_exits(EXIT_SUCCESS);
+ if (call_exit)
+ option_exits(EXIT_SUCCESS);
}
/*=export_func optionPrintVersion
- * private:
*
* what: Print the program version
* arg: + tOptions* + opts + program options descriptor +
@@ -190,7 +190,25 @@ print_ver(tOptions * opts, tOptDesc * od, FILE * fp)
void
optionPrintVersion(tOptions * opts, tOptDesc * od)
{
- print_ver(opts, od, print_exit ? stderr : stdout);
+ print_ver(opts, od, print_exit ? stderr : stdout, true);
+}
+
+/*=export_func optionPrintVersionAndReturn
+ *
+ * what: Print the program version
+ * arg: + tOptions* + opts + program options descriptor +
+ * arg: + tOptDesc* + od + the descriptor for this arg +
+ *
+ * doc:
+ * This routine will print the version to stdout and return
+ * instead of exiting. Please see the source for the
+ * @code{print_ver} funtion for details on selecting how
+ * verbose to be after this function returns.
+=*/
+void
+optionPrintVersionAndReturn(tOptions * opts, tOptDesc * od)
+{
+ print_ver(opts, od, print_exit ? stderr : stdout, false);
}
/*=export_func optionVersionStderr
@@ -206,7 +224,7 @@ optionPrintVersion(tOptions * opts, tOptDesc * od)
void
optionVersionStderr(tOptions * opts, tOptDesc * od)
{
- print_ver(opts, od, stderr);
+ print_ver(opts, od, stderr, true);
}
/** @}