Upgrade diffutils from 3.2 to 3.3 on the vendor branch
authorJohn Marino <draco@marino.st>
Tue, 23 Apr 2013 18:22:30 +0000 (20:22 +0200)
committerJohn Marino <draco@marino.st>
Tue, 23 Apr 2013 19:31:11 +0000 (21:31 +0200)
194 files changed:
contrib/diffutils/README
contrib/diffutils/doc/diffutils.info
contrib/diffutils/lib/allocator.c [new file with mode: 0644]
contrib/diffutils/lib/allocator.h [new file with mode: 0644]
contrib/diffutils/lib/anytostr.c
contrib/diffutils/lib/areadlink.c [new file with mode: 0644]
contrib/diffutils/lib/areadlink.h [copied from contrib/diffutils/lib/strnlen1.h with 56% similarity]
contrib/diffutils/lib/asnprintf.c [new file with mode: 0644]
contrib/diffutils/lib/asprintf.c [new file with mode: 0644]
contrib/diffutils/lib/basename-lgpl.c
contrib/diffutils/lib/basename.c
contrib/diffutils/lib/binary-io.c [new file with mode: 0644]
contrib/diffutils/lib/binary-io.h [new file with mode: 0644]
contrib/diffutils/lib/bitrotate.c [new file with mode: 0644]
contrib/diffutils/lib/bitrotate.h
contrib/diffutils/lib/c-ctype.c
contrib/diffutils/lib/c-ctype.h
contrib/diffutils/lib/c-stack.c
contrib/diffutils/lib/c-stack.h
contrib/diffutils/lib/c-strcase.h
contrib/diffutils/lib/c-strcasecmp.c
contrib/diffutils/lib/c-strcaseeq.h [new file with mode: 0644]
contrib/diffutils/lib/c-strncasecmp.c
contrib/diffutils/lib/careadlinkat.c [new file with mode: 0644]
contrib/diffutils/lib/careadlinkat.h [new file with mode: 0644]
contrib/diffutils/lib/close.c [new file with mode: 0644]
contrib/diffutils/lib/cmpbuf.c
contrib/diffutils/lib/cmpbuf.h
contrib/diffutils/lib/diffseq.h
contrib/diffutils/lib/dirname-lgpl.c
contrib/diffutils/lib/dirname.c
contrib/diffutils/lib/dirname.h
contrib/diffutils/lib/dosname.h
contrib/diffutils/lib/dup2.c
contrib/diffutils/lib/error.c
contrib/diffutils/lib/error.h
contrib/diffutils/lib/exclude.c
contrib/diffutils/lib/exclude.h
contrib/diffutils/lib/exitfail.c
contrib/diffutils/lib/exitfail.h
contrib/diffutils/lib/fcntl.c
contrib/diffutils/lib/fd-hook.c [new file with mode: 0644]
contrib/diffutils/lib/fd-hook.h [new file with mode: 0644]
contrib/diffutils/lib/file-type.c
contrib/diffutils/lib/file-type.h
contrib/diffutils/lib/filenamecat-lgpl.c
contrib/diffutils/lib/filenamecat.c
contrib/diffutils/lib/filenamecat.h
contrib/diffutils/lib/float+.h [new file with mode: 0644]
contrib/diffutils/lib/float.c [copied from contrib/diffutils/lib/mbslen.c with 51% similarity]
contrib/diffutils/lib/float.in.h [new file with mode: 0644]
contrib/diffutils/lib/fnmatch.c
contrib/diffutils/lib/fnmatch_loop.c
contrib/diffutils/lib/freopen-safer.c
contrib/diffutils/lib/fstat.c [new file with mode: 0644]
contrib/diffutils/lib/getopt.c
contrib/diffutils/lib/getopt1.c
contrib/diffutils/lib/getopt_int.h
contrib/diffutils/lib/gettext.h
contrib/diffutils/lib/gettime.c
contrib/diffutils/lib/hard-locale.c
contrib/diffutils/lib/hard-locale.h
contrib/diffutils/lib/hash.c
contrib/diffutils/lib/hash.h
contrib/diffutils/lib/ignore-value.h
contrib/diffutils/lib/intprops.h
contrib/diffutils/lib/inttostr.h
contrib/diffutils/lib/itold.c [copied from contrib/diffutils/lib/exitfail.c with 64% similarity]
contrib/diffutils/lib/localcharset.c
contrib/diffutils/lib/localcharset.h
contrib/diffutils/lib/locale.in.h [new file with mode: 0644]
contrib/diffutils/lib/localeconv.c [new file with mode: 0644]
contrib/diffutils/lib/lstat.c
contrib/diffutils/lib/malloca.c
contrib/diffutils/lib/malloca.h
contrib/diffutils/lib/mbchar.c
contrib/diffutils/lib/mbchar.h
contrib/diffutils/lib/mbiter.c [new file with mode: 0644]
contrib/diffutils/lib/mbiter.h
contrib/diffutils/lib/mbscasecmp.c
contrib/diffutils/lib/mbslen.c
contrib/diffutils/lib/mbsstr.c
contrib/diffutils/lib/mbuiter.c [new file with mode: 0644]
contrib/diffutils/lib/mbuiter.h
contrib/diffutils/lib/mktime.c
contrib/diffutils/lib/msvc-inval.c [new file with mode: 0644]
contrib/diffutils/lib/msvc-inval.h [new file with mode: 0644]
contrib/diffutils/lib/msvc-nothrow.c [new file with mode: 0644]
contrib/diffutils/lib/msvc-nothrow.h [new file with mode: 0644]
contrib/diffutils/lib/pathmax.h [new file with mode: 0644]
contrib/diffutils/lib/prepargs.c
contrib/diffutils/lib/printf-args.c [new file with mode: 0644]
contrib/diffutils/lib/printf-args.h [new file with mode: 0644]
contrib/diffutils/lib/printf-parse.c [new file with mode: 0644]
contrib/diffutils/lib/printf-parse.h [new file with mode: 0644]
contrib/diffutils/lib/progname.c
contrib/diffutils/lib/progname.h
contrib/diffutils/lib/propername.c
contrib/diffutils/lib/propername.h
contrib/diffutils/lib/quote.c [deleted file]
contrib/diffutils/lib/quote.h
contrib/diffutils/lib/quotearg.c
contrib/diffutils/lib/quotearg.h
contrib/diffutils/lib/raise.c [new file with mode: 0644]
contrib/diffutils/lib/readlink.c [new file with mode: 0644]
contrib/diffutils/lib/regcomp.c
contrib/diffutils/lib/regex.c
contrib/diffutils/lib/regex.h
contrib/diffutils/lib/regex_internal.c
contrib/diffutils/lib/regex_internal.h
contrib/diffutils/lib/regexec.c
contrib/diffutils/lib/secure_getenv.c [new file with mode: 0644]
contrib/diffutils/lib/sh-quote.c
contrib/diffutils/lib/sh-quote.h
contrib/diffutils/lib/sig-handler.c [new file with mode: 0644]
contrib/diffutils/lib/sig-handler.h
contrib/diffutils/lib/size_max.h [new file with mode: 0644]
contrib/diffutils/lib/stat-time.c [new file with mode: 0644]
contrib/diffutils/lib/stat-time.h
contrib/diffutils/lib/stdio--.h
contrib/diffutils/lib/stdio-safer.h
contrib/diffutils/lib/str-kmp.h
contrib/diffutils/lib/streq.h
contrib/diffutils/lib/strerror-override.c
contrib/diffutils/lib/strerror-override.h
contrib/diffutils/lib/strerror.c [new file with mode: 0644]
contrib/diffutils/lib/strftime.c
contrib/diffutils/lib/strftime.h
contrib/diffutils/lib/striconv.c
contrib/diffutils/lib/striconv.h
contrib/diffutils/lib/stripslash.c
contrib/diffutils/lib/strnlen1.c
contrib/diffutils/lib/strnlen1.h
contrib/diffutils/lib/sys_types.in.h [new file with mode: 0644]
contrib/diffutils/lib/system-quote.c [new file with mode: 0644]
contrib/diffutils/lib/system-quote.h [new file with mode: 0644]
contrib/diffutils/lib/tempname.c
contrib/diffutils/lib/tempname.h
contrib/diffutils/lib/timespec.c [new file with mode: 0644]
contrib/diffutils/lib/timespec.h
contrib/diffutils/lib/trim.c
contrib/diffutils/lib/trim.h
contrib/diffutils/lib/unistd.c [new file with mode: 0644]
contrib/diffutils/lib/unistr/u8-mbtoucr.c
contrib/diffutils/lib/unistr/u8-uctomb-aux.c
contrib/diffutils/lib/unistr/u8-uctomb.c
contrib/diffutils/lib/uniwidth/cjk.h
contrib/diffutils/lib/uniwidth/width.c
contrib/diffutils/lib/unlocked-io.h
contrib/diffutils/lib/vasnprintf.c [new file with mode: 0644]
contrib/diffutils/lib/vasnprintf.h [new file with mode: 0644]
contrib/diffutils/lib/vasprintf.c [new file with mode: 0644]
contrib/diffutils/lib/verify.h
contrib/diffutils/lib/version-etc-fsf.c
contrib/diffutils/lib/version-etc.c
contrib/diffutils/lib/version-etc.h
contrib/diffutils/lib/wctype-h.c [new file with mode: 0644]
contrib/diffutils/lib/wcwidth.c
contrib/diffutils/lib/xalloc-die.c
contrib/diffutils/lib/xalloc-oversized.h
contrib/diffutils/lib/xalloc.h
contrib/diffutils/lib/xasprintf.c [copied from contrib/diffutils/lib/exitfail.c with 64% similarity]
contrib/diffutils/lib/xfreopen.c
contrib/diffutils/lib/xmalloc.c
contrib/diffutils/lib/xreadlink.c [copied from contrib/diffutils/lib/xstriconv.c with 51% similarity]
contrib/diffutils/lib/xreadlink.h [copied from contrib/diffutils/lib/exitfail.c with 67% similarity]
contrib/diffutils/lib/xsize.c [new file with mode: 0644]
contrib/diffutils/lib/xsize.h [new file with mode: 0644]
contrib/diffutils/lib/xstriconv.c
contrib/diffutils/lib/xstriconv.h
contrib/diffutils/lib/xstrndup.c
contrib/diffutils/lib/xstrndup.h
contrib/diffutils/lib/xstrtol-error.c
contrib/diffutils/lib/xstrtol.c
contrib/diffutils/lib/xstrtol.h
contrib/diffutils/lib/xvasprintf.c [new file with mode: 0644]
contrib/diffutils/lib/xvasprintf.h [copied from contrib/diffutils/lib/error.h with 51% similarity]
contrib/diffutils/man/diff.1
contrib/diffutils/man/diff3.1
contrib/diffutils/man/sdiff.1
contrib/diffutils/src/analyze.c
contrib/diffutils/src/context.c
contrib/diffutils/src/diff.c
contrib/diffutils/src/diff.h
contrib/diffutils/src/diff3.c
contrib/diffutils/src/dir.c
contrib/diffutils/src/ed.c
contrib/diffutils/src/ifdef.c
contrib/diffutils/src/io.c
contrib/diffutils/src/normal.c
contrib/diffutils/src/sdiff.c
contrib/diffutils/src/side.c
contrib/diffutils/src/system.h
contrib/diffutils/src/util.c

index f51587a..753e66e 100644 (file)
@@ -9,8 +9,8 @@ Please see the file COPYING for copying conditions.
 Please see the file doc/version.texi for version information.
 
 Please see the file doc/diffutils.texi (or doc/diffutils.info) for
-documentation that can be printed with TeX, or read with the `info'
-program or with Emacs's `M-x info'.  Brief man pages are in man/*,
+documentation that can be printed with TeX, or read with the 'info'
+program or with Emacs's 'M-x info'.  Brief man pages are in man/*,
 but they are no substitute for the documentation.
 
 Please see the file ABOUT-NLS for notes about translations.
@@ -21,7 +21,7 @@ command "./configure --help" lists the supported --enable and --with
 options.
 
 If you have a problem with internationalization, you might be able to
-work around it as described in ABOUT-NLS by invoking `./configure
+work around it as described in ABOUT-NLS by invoking './configure
 --disable-nls'.  Many of the problems arise from dynamic linking
 issues on non-GNU platforms (e.g. with the iconv library).  Such
 problems tend to be shared by other GNU applications on these
@@ -51,7 +51,7 @@ Please report bugs to <bug-gnu-utils@gnu.org>.
 
 -----
 
-Copyright (C) 1992, 1998, 2001-2002, 2004, 2009-2011 Free Software Foundation,
+Copyright (C) 1992, 1998, 2001-2002, 2004, 2009-2013 Free Software Foundation,
 Inc.
 
 This file is part of GNU Diffutils.
@@ -60,5 +60,5 @@ Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
 any later version published by the Free Software Foundation; with no
 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
-Texts.  A copy of the license is included in the ``GNU Free
-Documentation License'' file as part of this distribution.
+Texts.  A copy of the license is included in the "GNU Free
+Documentation License" file as part of this distribution.
index b44d1cf..42ee687 100644 (file)
@@ -1,12 +1,12 @@
-This is diffutils.info, produced by makeinfo version 4.13 from
+This is diffutils.info-t, produced by makeinfo version 4.13 from
 diffutils.texi.
 
-This manual is for GNU Diffutils (version 3.2, 15 August 2011), and
+This manual is for GNU Diffutils (version 3.3, 23 March 2013), and
 documents the GNU `diff', `diff3', `sdiff', and `cmp' commands for
 showing the differences between files and the GNU `patch' command for
 using their output to update files.
 
-   Copyright (C) 1992-1994, 1998, 2001-2002, 2004, 2006, 2009-2011 Free
+   Copyright (C) 1992-1994, 1998, 2001-2002, 2004, 2006, 2009-2013 Free
 Software Foundation, Inc.
 
      Permission is granted to copy, distribute and/or modify this
@@ -31,17 +31,17 @@ START-INFO-DIR-ENTRY
 END-INFO-DIR-ENTRY
 
 \1f
-File: diffutils.info,  Node: Top,  Next: Overview,  Up: (dir)
+File: diffutils.info-t,  Node: Top,  Next: Overview,  Up: (dir)
 
 Comparing and Merging Files
 ***************************
 
-This manual is for GNU Diffutils (version 3.2, 15 August 2011), and
+This manual is for GNU Diffutils (version 3.3, 23 March 2013), and
 documents the GNU `diff', `diff3', `sdiff', and `cmp' commands for
 showing the differences between files and the GNU `patch' command for
 using their output to update files.
 
-   Copyright (C) 1992-1994, 1998, 2001-2002, 2004, 2006, 2009-2011 Free
+   Copyright (C) 1992-1994, 1998, 2001-2002, 2004, 2006, 2009-2013 Free
 Software Foundation, Inc.
 
      Permission is granted to copy, distribute and/or modify this
@@ -84,7 +84,7 @@ Software Foundation, Inc.
 * Index::                 Index.
 
 \1f
-File: diffutils.info,  Node: Overview,  Next: Comparison,  Prev: Top,  Up: Top
+File: diffutils.info-t,  Node: Overview,  Next: Comparison,  Prev: Top,  Up: Top
 
 Overview
 ********
@@ -155,7 +155,7 @@ MacKenzie.  Parts of this manual are adapted from a manual page written
 by Larry Wall, with his permission.
 
 \1f
-File: diffutils.info,  Node: Comparison,  Next: Output Formats,  Prev: Overview,  Up: Top
+File: diffutils.info-t,  Node: Comparison,  Next: Output Formats,  Prev: Overview,  Up: Top
 
 1 What Comparison Means
 ***********************
@@ -208,7 +208,7 @@ changes to the same file.
 * Binary::            Comparing binary files or forcing text comparisons.
 
 \1f
-File: diffutils.info,  Node: Hunks,  Next: White Space,  Up: Comparison
+File: diffutils.info-t,  Node: Hunks,  Next: White Space,  Up: Comparison
 
 1.1 Hunks
 =========
@@ -254,7 +254,7 @@ possible.  You can adjust this tradeoff with the `--minimal' (`-d')
 option (*note diff Performance::).
 
 \1f
-File: diffutils.info,  Node: White Space,  Next: Blank Lines,  Prev: Hunks,  Up: Comparison
+File: diffutils.info-t,  Node: White Space,  Next: Blank Lines,  Prev: Hunks,  Up: Comparison
 
 1.2 Suppressing Differences in Blank and Tab Spacing
 ====================================================
@@ -292,7 +292,7 @@ line.  Hence the `-w' or `--ignore-all-space' option does not ignore
 newline-related changes; it ignores only other white space changes.
 
 \1f
-File: diffutils.info,  Node: Blank Lines,  Next: Specified Lines,  Prev: White Space,  Up: Comparison
+File: diffutils.info-t,  Node: Blank Lines,  Next: Specified Lines,  Prev: White Space,  Up: Comparison
 
 1.3 Suppressing Differences Whose Lines Are All Blank
 =====================================================
@@ -318,7 +318,7 @@ words, `-B' is equivalent to `-I '^$'' by default, but it is equivalent
 to `-I '^[[:space:]]*$'' if `-b', `-w' or `-Z' is also specified.
 
 \1f
-File: diffutils.info,  Node: Specified Lines,  Next: Case Folding,  Prev: Blank Lines,  Up: Comparison
+File: diffutils.info-t,  Node: Specified Lines,  Next: Case Folding,  Prev: Blank Lines,  Up: Comparison
 
 1.4 Suppressing Differences Whose Lines All Match a Regular Expression
 ======================================================================
@@ -341,7 +341,7 @@ by using more than one `-I' option.  `diff' tries to match each line
 against each regular expression.
 
 \1f
-File: diffutils.info,  Node: Case Folding,  Next: Brief,  Prev: Specified Lines,  Up: Comparison
+File: diffutils.info-t,  Node: Case Folding,  Next: Brief,  Prev: Specified Lines,  Up: Comparison
 
 1.5 Suppressing Case Differences
 ================================
@@ -352,7 +352,7 @@ case counterparts, so that, for example, it considers `Funky Stuff',
 use the `-i' or `--ignore-case' option.
 
 \1f
-File: diffutils.info,  Node: Brief,  Next: Binary,  Prev: Case Folding,  Up: Comparison
+File: diffutils.info-t,  Node: Brief,  Next: Binary,  Prev: Case Folding,  Up: Comparison
 
 1.6 Summarizing Which Files Differ
 ==================================
@@ -381,7 +381,7 @@ Invoking cmp::).
 two files.
 
 \1f
-File: diffutils.info,  Node: Binary,  Prev: Brief,  Up: Comparison
+File: diffutils.info-t,  Node: Binary,  Prev: Brief,  Up: Comparison
 
 1.7 Binary Files and Forcing Text Comparisons
 =============================================
@@ -455,7 +455,7 @@ few non-text bytes but otherwise are like text files, you can force
 line by using the `-a' or `--text' option.
 
 \1f
-File: diffutils.info,  Node: Output Formats,  Next: Incomplete Lines,  Prev: Comparison,  Up: Top
+File: diffutils.info-t,  Node: Output Formats,  Next: Incomplete Lines,  Prev: Comparison,  Up: Top
 
 2 `diff' Output Formats
 ***********************
@@ -474,7 +474,7 @@ reports the differences between two sample input files.
 * If-then-else::      Merging files with if-then-else.
 
 \1f
-File: diffutils.info,  Node: Sample diff Input,  Next: Context,  Up: Output Formats
+File: diffutils.info-t,  Node: Sample diff Input,  Next: Context,  Up: Output Formats
 
 2.1 Two Sample Input Files
 ==========================
@@ -518,7 +518,7 @@ second and third lines of `tzu', and the last hunk contains just the
 last three lines of `tzu'.
 
 \1f
-File: diffutils.info,  Node: Context,  Next: Side by Side,  Prev: Sample diff Input,  Up: Output Formats
+File: diffutils.info-t,  Node: Context,  Next: Side by Side,  Prev: Sample diff Input,  Up: Output Formats
 
 2.2 Showing Differences in Their Context
 ========================================
@@ -551,7 +551,7 @@ more information on using `patch' to apply imperfect diffs.
 * Alternate Names:: Showing alternate file names in context headers.
 
 \1f
-File: diffutils.info,  Node: Context Format,  Next: Unified Format,  Up: Context
+File: diffutils.info-t,  Node: Context Format,  Next: Unified Format,  Up: Context
 
 2.2.1 Context Format
 --------------------
@@ -573,7 +573,7 @@ needs at least two lines of context.
 * Detailed Context:: A detailed description of the context output format.
 
 \1f
-File: diffutils.info,  Node: Example Context,  Next: Less Context,  Up: Context Format
+File: diffutils.info-t,  Node: Example Context,  Next: Less Context,  Up: Context Format
 
 2.2.1.1 An Example of Context Format
 ....................................
@@ -613,7 +613,7 @@ run together, because their contents overlap.
      + The door of all subtleties!
 
 \1f
-File: diffutils.info,  Node: Less Context,  Next: Detailed Context,  Prev: Example Context,  Up: Context Format
+File: diffutils.info-t,  Node: Less Context,  Next: Detailed Context,  Prev: Example Context,  Up: Context Format
 
 2.2.1.2 An Example of Context Format with Less Context
 ......................................................
@@ -645,7 +645,7 @@ context line is reported here.
      + The door of all subtleties!
 
 \1f
-File: diffutils.info,  Node: Detailed Context,  Prev: Less Context,  Up: Context Format
+File: diffutils.info-t,  Node: Detailed Context,  Prev: Less Context,  Up: Context Format
 
 2.2.1.3 Detailed Description of Context Format
 ..............................................
@@ -705,7 +705,7 @@ FROM-FILE are omitted.  If all of the changes are deletions, the lines
 of TO-FILE are omitted.
 
 \1f
-File: diffutils.info,  Node: Unified Format,  Next: Sections,  Prev: Context Format,  Up: Context
+File: diffutils.info-t,  Node: Unified Format,  Next: Sections,  Prev: Context Format,  Up: Context
 
 2.2.2 Unified Format
 --------------------
@@ -726,7 +726,7 @@ operation, `patch' typically needs at least three lines of context.
 * Detailed Unified:: A detailed description of unified format.
 
 \1f
-File: diffutils.info,  Node: Example Unified,  Next: Detailed Unified,  Up: Unified Format
+File: diffutils.info-t,  Node: Example Unified,  Next: Detailed Unified,  Up: Unified Format
 
 2.2.2.1 An Example of Unified Format
 ....................................
@@ -755,7 +755,7 @@ Input::, for the complete contents of the two files):
      +The door of all subtleties!
 
 \1f
-File: diffutils.info,  Node: Detailed Unified,  Prev: Example Unified,  Up: Unified Format
+File: diffutils.info-t,  Node: Detailed Unified,  Prev: Example Unified,  Up: Unified Format
 
 2.2.2.2 Detailed Description of Unified Format
 ..............................................
@@ -771,8 +771,8 @@ indicate the date, time with fractional seconds, and time zone.  The
 fractional seconds are omitted on hosts that do not support fractional
 time stamps.
 
-   You can change the header's content with the `--label=LABEL' option;
-see *Note Alternate Names::.
+   You can change the header's content with the `--label=LABEL' option.
+*Note Alternate Names::.
 
    Next come one or more hunks of differences; each hunk shows one area
 where the files differ.  Unified format hunks look like this:
@@ -801,7 +801,7 @@ following indicator characters in the left print column:
      A line was removed here from the first file.
 
 \1f
-File: diffutils.info,  Node: Sections,  Next: Alternate Names,  Prev: Unified Format,  Up: Context
+File: diffutils.info-t,  Node: Sections,  Next: Alternate Names,  Prev: Unified Format,  Up: Context
 
 2.2.3 Showing Which Sections Differences Are in
 -----------------------------------------------
@@ -819,7 +819,7 @@ lines are "section headings" is determined by a regular expression.
 * C Function Headings:: Showing headings of C functions.
 
 \1f
-File: diffutils.info,  Node: Specified Headings,  Next: C Function Headings,  Up: Sections
+File: diffutils.info-t,  Node: Specified Headings,  Next: C Function Headings,  Up: Sections
 
 2.2.3.1 Showing Lines That Match Regular Expressions
 ....................................................
@@ -857,7 +857,7 @@ regular expression, starting with the last one given.  This means that
 you can use `-p' and `-F' together, if you wish.
 
 \1f
-File: diffutils.info,  Node: C Function Headings,  Prev: Specified Headings,  Up: Sections
+File: diffutils.info-t,  Node: C Function Headings,  Prev: Specified Headings,  Up: Sections
 
 2.2.3.2 Showing C Function Headings
 ...................................
@@ -876,7 +876,7 @@ elsewhere in the command line.
 this option for the sake of convenience.
 
 \1f
-File: diffutils.info,  Node: Alternate Names,  Prev: Sections,  Up: Context
+File: diffutils.info-t,  Node: Alternate Names,  Prev: Sections,  Up: Context
 
 2.2.4 Showing Alternate File Names
 ----------------------------------
@@ -899,7 +899,7 @@ Pagination::).
      --- modified
 
 \1f
-File: diffutils.info,  Node: Side by Side,  Next: Normal,  Prev: Context,  Up: Output Formats
+File: diffutils.info-t,  Node: Side by Side,  Next: Normal,  Prev: Context,  Up: Output Formats
 
 2.3 Showing Differences Side by Side
 ====================================
@@ -940,7 +940,7 @@ white space
      incomplete.
 
    Normally, an output line is incomplete if and only if the lines that
-it contains are incomplete; *Note Incomplete Lines::.  However, when an
+it contains are incomplete *Note Incomplete Lines::.  However, when an
 output line represents two differing lines, one might be incomplete
 while the other is not.  In this case, the output line is complete, but
 its the gutter is marked `\' if the first line is incomplete, `/' if
@@ -963,7 +963,7 @@ merging files.
 * Example Side by Side:: Sample side by side output.
 
 \1f
-File: diffutils.info,  Node: Side by Side Format,  Next: Example Side by Side,  Up: Side by Side
+File: diffutils.info-t,  Node: Side by Side Format,  Next: Example Side by Side,  Up: Side by Side
 
 2.3.1 Controlling Side by Side Format
 -------------------------------------
@@ -983,7 +983,7 @@ lines.  The `--suppress-common-lines' option suppresses common lines
 entirely.
 
 \1f
-File: diffutils.info,  Node: Example Side by Side,  Prev: Side by Side Format,  Up: Side by Side
+File: diffutils.info-t,  Node: Example Side by Side,  Prev: Side by Side Format,  Up: Side by Side
 
 2.3.2 An Example of Side by Side Format
 ---------------------------------------
@@ -1008,7 +1008,7 @@ diff Input::, for the complete contents of the two files).
                                         >    The door of all subtleties!
 
 \1f
-File: diffutils.info,  Node: Normal,  Next: Scripts,  Prev: Side by Side,  Up: Output Formats
+File: diffutils.info-t,  Node: Normal,  Next: Scripts,  Prev: Side by Side,  Up: Output Formats
 
 2.4 Showing Differences Without Context
 =======================================
@@ -1030,7 +1030,7 @@ Use the `--normal' option to select this output format explicitly.
 * Detailed Normal:: A detailed description of normal output format.
 
 \1f
-File: diffutils.info,  Node: Example Normal,  Next: Detailed Normal,  Up: Normal
+File: diffutils.info-t,  Node: Example Normal,  Next: Detailed Normal,  Up: Normal
 
 2.4.1 An Example of Normal Format
 ---------------------------------
@@ -1053,7 +1053,7 @@ shows only the lines that are different between the two files.
      > The door of all subtleties!
 
 \1f
-File: diffutils.info,  Node: Detailed Normal,  Prev: Example Normal,  Up: Normal
+File: diffutils.info-t,  Node: Detailed Normal,  Prev: Example Normal,  Up: Normal
 
 2.4.2 Detailed Description of Normal Format
 -------------------------------------------
@@ -1097,7 +1097,7 @@ are:
      after line 3 of file 2.
 
 \1f
-File: diffutils.info,  Node: Scripts,  Next: If-then-else,  Prev: Normal,  Up: Output Formats
+File: diffutils.info-t,  Node: Scripts,  Next: If-then-else,  Prev: Normal,  Up: Output Formats
 
 2.5 Making Edit Scripts
 =======================
@@ -1112,7 +1112,7 @@ produce TO-FILE.
 * RCS::        A special `diff' output format used by RCS.
 
 \1f
-File: diffutils.info,  Node: ed Scripts,  Next: Forward ed,  Up: Scripts
+File: diffutils.info-t,  Node: ed Scripts,  Next: Forward ed,  Up: Scripts
 
 2.5.1 `ed' Scripts
 ------------------
@@ -1141,7 +1141,7 @@ old' edits `old' to make it a copy of `newN'.
 * Detailed ed:: A detailed description of `ed' format.
 
 \1f
-File: diffutils.info,  Node: Example ed,  Next: Detailed ed,  Up: ed Scripts
+File: diffutils.info-t,  Node: Example ed,  Next: Detailed ed,  Up: ed Scripts
 
 2.5.1.1 Example `ed' Script
 ...........................
@@ -1161,7 +1161,7 @@ the complete contents of the two files):
      1,2d
 
 \1f
-File: diffutils.info,  Node: Detailed ed,  Prev: Example ed,  Up: ed Scripts
+File: diffutils.info-t,  Node: Detailed ed,  Prev: Example ed,  Up: ed Scripts
 
 2.5.1.2 Detailed Description of `ed' Format
 ...........................................
@@ -1207,7 +1207,7 @@ are:
      `5,7d' means delete lines 5-7 of file 1.
 
 \1f
-File: diffutils.info,  Node: Forward ed,  Next: RCS,  Prev: ed Scripts,  Up: Scripts
+File: diffutils.info-t,  Node: Forward ed,  Next: RCS,  Prev: ed Scripts,  Up: Scripts
 
 2.5.2 Forward `ed' Scripts
 --------------------------
@@ -1225,7 +1225,7 @@ compatibility with older versions of `diff'.  Use the `-f' or
 `--forward-ed' option to select it.
 
 \1f
-File: diffutils.info,  Node: RCS,  Prev: Forward ed,  Up: Scripts
+File: diffutils.info-t,  Node: RCS,  Prev: Forward ed,  Up: Scripts
 
 2.5.3 RCS Scripts
 -----------------
@@ -1257,7 +1257,7 @@ for the complete contents of the two files):
      The door of all subtleties!
 
 \1f
-File: diffutils.info,  Node: If-then-else,  Prev: Scripts,  Up: Output Formats
+File: diffutils.info-t,  Node: If-then-else,  Prev: Scripts,  Up: Output Formats
 
 2.6 Merging Files with If-then-else
 ===================================
@@ -1299,7 +1299,7 @@ group formats and line formats, as described in the next sections.
 * Detailed If-then-else:: A detailed description of if-then-else format.
 
 \1f
-File: diffutils.info,  Node: Line Group Formats,  Next: Line Formats,  Up: If-then-else
+File: diffutils.info-t,  Node: Line Group Formats,  Next: Line Formats,  Up: If-then-else
 
 2.6.1 Line Group Formats
 ------------------------
@@ -1465,7 +1465,7 @@ forms.
      0, to `1 line' if N is 1, and to `%dN lines' otherwise.
 
 \1f
-File: diffutils.info,  Node: Line Formats,  Next: Example If-then-else,  Prev: Line Group Formats,  Up: If-then-else
+File: diffutils.info-t,  Node: Line Formats,  Next: Example If-then-else,  Prev: Line Group Formats,  Up: If-then-else
 
 2.6.2 Line Formats
 ------------------
@@ -1566,7 +1566,7 @@ fine control over `diff' output.
         old new
 
 \1f
-File: diffutils.info,  Node: Example If-then-else,  Next: Detailed If-then-else,  Prev: Line Formats,  Up: If-then-else
+File: diffutils.info-t,  Node: Example If-then-else,  Next: Detailed If-then-else,  Prev: Line Formats,  Up: If-then-else
 
 2.6.3 An Example of If-then-else Format
 ---------------------------------------
@@ -1599,7 +1599,7 @@ for the complete contents of the two files):
      #endif /* TWO */
 
 \1f
-File: diffutils.info,  Node: Detailed If-then-else,  Prev: Example If-then-else,  Up: If-then-else
+File: diffutils.info-t,  Node: Detailed If-then-else,  Prev: Example If-then-else,  Up: If-then-else
 
 2.6.4 Detailed Description of If-then-else Format
 -------------------------------------------------
@@ -1642,10 +1642,10 @@ contain duplicate or otherwise incorrect code.
 
    The `patch' `-D NAME' option behaves like the `diff' `-D NAME'
 option, except it operates on a file and a diff to produce a merged
-file; *Note patch Options::.
+file *Note patch Options::.
 
 \1f
-File: diffutils.info,  Node: Incomplete Lines,  Next: Comparing Directories,  Prev: Output Formats,  Up: Top
+File: diffutils.info-t,  Node: Incomplete Lines,  Next: Comparing Directories,  Prev: Output Formats,  Up: Top
 
 3 Incomplete Lines
 ******************
@@ -1661,8 +1661,8 @@ line by a following line that starts with `\'.  However, the RCS format
 (*note RCS::) outputs the incomplete line as-is, without any trailing
 newline or following line.  The side by side format normally represents
 incomplete lines as-is, but in some cases uses a `\' or `/' gutter
-marker; *Note Side by Side::.  The if-then-else line format preserves a
-line's incompleteness with `%L', and discards the newline with `%l';
+marker.  *Note Side by Side::.  The if-then-else line format preserves
+a line's incompleteness with `%L', and discards the newline with `%l'.
 *Note Line Formats::.  Finally, with the `ed' and forward `ed' output
 formats (*note Output Formats::) `diff' cannot represent an incomplete
 line, so it pretends there was a newline and reports an error.
@@ -1691,7 +1691,7 @@ outputs the following without a trailing newline:
      .
 
 \1f
-File: diffutils.info,  Node: Comparing Directories,  Next: Adjusting Output,  Prev: Incomplete Lines,  Up: Top
+File: diffutils.info-t,  Node: Comparing Directories,  Next: Adjusting Output,  Prev: Incomplete Lines,  Up: Top
 
 4 Comparing Directories
 ***********************
@@ -1708,19 +1708,22 @@ subdirectories' files, but if you use the `-r' or `--recursive' option,
 it compares every corresponding pair of files in the directory trees,
 as many levels deep as they go.
 
-   For file names that are in only one of the directories, `diff'
-normally does not show the contents of the file that exists; it reports
-only that the file exists in that directory and not in the other.  You
-can make `diff' act as though the file existed but was empty in the
-other directory, so that it outputs the entire contents of the file that
-actually exists.  (It is output as either an insertion or a deletion,
-depending on whether it is in the first or the second directory given.)
-To do this, use the `--new-file' (`-N') option.
-
-   If the older directory contains one or more large files that are not
-in the newer directory, you can make the patch smaller by using the
+   If only one file exists, `diff' normally does not show its contents;
+it merely reports that one file exists but the other does not.  You can
+make `diff' act as though the missing file is empty, so that it outputs
+the entire contents of the file that actually exists.  (It is output as
+either an insertion or a deletion, depending on whether the missing
+file is in the first or the second position.)  To do this, use the
+`--new-file' (`-N') option.  This option affects command-line arguments
+as well as files found via directory traversal; for example, `diff -N a
+b' treats `a' as empty if `a' does not exist but `b' does, and
+similarly `diff -N - b' treats standard input as empty if it is closed
+but `b' exists.
+
+   If the older directory contains large files that are not in the
+newer directory, you can make the patch smaller by using the
 `--unidirectional-new-file' option instead of `-N'.  This option is
-like `-N' except that it only inserts the contents of files that appear
+like `-N' except that it inserts the contents only of files that appear
 in the second directory but not the first (that is, files that were
 added).  At the top of the patch, write instructions for the user
 applying the patch to remove the files that were deleted before
@@ -1766,8 +1769,13 @@ behavior.
 `--ignore-file-name-case' option is in effect, case is ignored when
 excluding file names matching the specified patterns.
 
+   To avoid that `diff' follows symbolic links, use the
+`--no-dereference'.  When this option is in use, symbolic links will be
+treated like a special kind of files, rather than comparing the target
+of each symbolic link.
+
 \1f
-File: diffutils.info,  Node: Adjusting Output,  Next: diff Performance,  Prev: Comparing Directories,  Up: Top
+File: diffutils.info-t,  Node: Adjusting Output,  Next: diff Performance,  Prev: Comparing Directories,  Up: Top
 
 5 Making `diff' Output Prettier
 *******************************
@@ -1782,7 +1790,7 @@ These adjustments can be applied to any output format.
 * Pagination::      Page numbering and time-stamping `diff' output.
 
 \1f
-File: diffutils.info,  Node: Tabs,  Next: Trailing Blanks,  Up: Adjusting Output
+File: diffutils.info-t,  Node: Tabs,  Next: Trailing Blanks,  Up: Adjusting Output
 
 5.1 Preserving Tab Stop Alignment
 =================================
@@ -1814,7 +1822,7 @@ type indicator character.  Select this method with the `-T' or
 `--initial-tab' option.
 
 \1f
-File: diffutils.info,  Node: Trailing Blanks,  Next: Pagination,  Prev: Tabs,  Up: Adjusting Output
+File: diffutils.info-t,  Node: Trailing Blanks,  Next: Pagination,  Prev: Tabs,  Up: Adjusting Output
 
 5.2 Omitting trailing blanks
 ============================
@@ -1838,7 +1846,7 @@ to be munged by text editors or by transmission via email.  It is
 accepted by GNU `patch' as well.
 
 \1f
-File: diffutils.info,  Node: Pagination,  Prev: Trailing Blanks,  Up: Adjusting Output
+File: diffutils.info-t,  Node: Pagination,  Prev: Trailing Blanks,  Up: Adjusting Output
 
 5.3 Paginating `diff' Output
 ============================
@@ -1851,7 +1859,7 @@ for `diff -lc lao tzu':
      2002-02-22 14:20                 diff -lc lao tzu                 Page 1
 
 \1f
-File: diffutils.info,  Node: diff Performance,  Next: Comparing Three Files,  Prev: Adjusting Output,  Up: Top
+File: diffutils.info-t,  Node: diff Performance,  Next: Comparing Three Files,  Prev: Adjusting Output,  Up: Top
 
 6 `diff' Performance Tradeoffs
 ******************************
@@ -1910,7 +1918,7 @@ towards the end of the file.  Merging hunks can make the output look
 nicer in some cases.
 
 \1f
-File: diffutils.info,  Node: Comparing Three Files,  Next: diff3 Merging,  Prev: diff Performance,  Up: Top
+File: diffutils.info-t,  Node: Comparing Three Files,  Next: diff3 Merging,  Prev: diff Performance,  Up: Top
 
 7 Comparing Three Files
 ***********************
@@ -1929,11 +1937,11 @@ location in the input files.
 
 * Sample diff3 Input::    Sample `diff3' input for examples.
 * Example diff3 Normal::  Sample output in the normal format.
-* diff3 Hunks::           The format of normal output format.
 * Detailed diff3 Normal:: A detailed description of normal output format.
+* diff3 Hunks::           The format of normal output format.
 
 \1f
-File: diffutils.info,  Node: Sample diff3 Input,  Next: Example diff3 Normal,  Up: Comparing Three Files
+File: diffutils.info-t,  Node: Sample diff3 Input,  Next: Example diff3 Normal,  Up: Comparing Three Files
 
 7.1 A Third Sample Input File
 =============================
@@ -1959,7 +1967,7 @@ Input::).  This is the third sample file, called `tao':
        -- The Way of Lao-Tzu, tr. Wing-tsit Chan
 
 \1f
-File: diffutils.info,  Node: Example diff3 Normal,  Next: diff3 Hunks,  Prev: Sample diff3 Input,  Up: Comparing Three Files
+File: diffutils.info-t,  Node: Example diff3 Normal,  Next: Detailed diff3 Normal,  Prev: Sample diff3 Input,  Up: Comparing Three Files
 
 7.2 An Example of `diff3' Normal Format
 =======================================
@@ -1998,7 +2006,7 @@ shows only the lines that are different among the three files.
          -- The Way of Lao-Tzu, tr. Wing-tsit Chan
 
 \1f
-File: diffutils.info,  Node: Detailed diff3 Normal,  Prev: diff3 Hunks,  Up: Comparing Three Files
+File: diffutils.info-t,  Node: Detailed diff3 Normal,  Next: diff3 Hunks,  Prev: Example diff3 Normal,  Up: Comparing Three Files
 
 7.3 Detailed Description of `diff3' Normal Format
 =================================================
@@ -2036,7 +2044,7 @@ Incomplete Lines::), it is distinguished on output from a full line by
 a following line that starts with `\'.
 
 \1f
-File: diffutils.info,  Node: diff3 Hunks,  Next: Detailed diff3 Normal,  Prev: Example diff3 Normal,  Up: Comparing Three Files
+File: diffutils.info-t,  Node: diff3 Hunks,  Prev: Detailed diff3 Normal,  Up: Comparing Three Files
 
 7.4 `diff3' Hunks
 =================
@@ -2077,7 +2085,7 @@ all three files, then a three-way hunk containing the last line of each
 file.
 
 \1f
-File: diffutils.info,  Node: diff3 Merging,  Next: Interactive Merging,  Prev: Comparing Three Files,  Up: Top
+File: diffutils.info-t,  Node: diff3 Merging,  Next: Interactive Merging,  Prev: Comparing Three Files,  Up: Top
 
 8 Merging From a Common Ancestor
 ********************************
@@ -2128,7 +2136,7 @@ this bypasses some problems with `ed'.
 * Saving the Changed File::  Emulating System V behavior.
 
 \1f
-File: diffutils.info,  Node: Which Changes,  Next: Marking Conflicts,  Up: diff3 Merging
+File: diffutils.info-t,  Node: Which Changes,  Next: Marking Conflicts,  Up: diff3 Merging
 
 8.1 Selecting Which Changes to Incorporate
 ==========================================
@@ -2171,7 +2179,7 @@ changes output by `-3' and `-x'.
      .
 
 \1f
-File: diffutils.info,  Node: Marking Conflicts,  Next: Bypassing ed,  Prev: Which Changes,  Up: diff3 Merging
+File: diffutils.info-t,  Node: Marking Conflicts,  Next: Bypassing ed,  Prev: Which Changes,  Up: diff3 Merging
 
 8.2 Marking Conflicts
 =====================
@@ -2245,7 +2253,7 @@ that the output looks like it came from files named `X', `Y' and `Z'
 rather than from files named `A', `B' and `C'.
 
 \1f
-File: diffutils.info,  Node: Bypassing ed,  Next: Merging Incomplete Lines,  Prev: Marking Conflicts,  Up: diff3 Merging
+File: diffutils.info-t,  Node: Bypassing ed,  Next: Merging Incomplete Lines,  Prev: Marking Conflicts,  Up: diff3 Merging
 
 8.3 Generating the Merged Output Directly
 =========================================
@@ -2283,7 +2291,7 @@ Input:: for a copy of the input files) would output the following:
      >>>>>>> tao
 
 \1f
-File: diffutils.info,  Node: Merging Incomplete Lines,  Next: Saving the Changed File,  Prev: Bypassing ed,  Up: diff3 Merging
+File: diffutils.info-t,  Node: Merging Incomplete Lines,  Next: Saving the Changed File,  Prev: Bypassing ed,  Up: diff3 Merging
 
 8.4 How `diff3' Merges Incomplete Lines
 =======================================
@@ -2300,7 +2308,7 @@ incomplete line is found, `diff3' generates a warning and acts as if a
 newline had been present.
 
 \1f
-File: diffutils.info,  Node: Saving the Changed File,  Prev: Merging Incomplete Lines,  Up: diff3 Merging
+File: diffutils.info-t,  Node: Saving the Changed File,  Prev: Merging Incomplete Lines,  Up: diff3 Merging
 
 8.5 Saving the Changed File
 ===========================
@@ -2315,7 +2323,7 @@ and appends the `w' and `q' commands.
 and is incompatible with the merged output option `-m'.
 
 \1f
-File: diffutils.info,  Node: Interactive Merging,  Next: Merging with patch,  Prev: diff3 Merging,  Up: Top
+File: diffutils.info-t,  Node: Interactive Merging,  Next: Merging with patch,  Prev: diff3 Merging,  Up: Top
 
 9 Interactive Merging with `sdiff'
 **********************************
@@ -2334,7 +2342,7 @@ package `emerge'.  *Note emerge: (emacs)emerge, for more information.
 * Merge Commands::       Merging two files interactively.
 
 \1f
-File: diffutils.info,  Node: sdiff Option Summary,  Next: Merge Commands,  Up: Interactive Merging
+File: diffutils.info-t,  Node: sdiff Option Summary,  Next: Merge Commands,  Up: Interactive Merging
 
 9.1 Specifying `diff' Options to `sdiff'
 ========================================
@@ -2363,7 +2371,7 @@ of `diff': with `sdiff', `-w COLUMNS' is equivalent to
 `--side-by-side' (`-y') option (*note Side by Side::).
 
 \1f
-File: diffutils.info,  Node: Merge Commands,  Prev: sdiff Option Summary,  Up: Interactive Merging
+File: diffutils.info-t,  Node: Merge Commands,  Prev: sdiff Option Summary,  Up: Interactive Merging
 
 9.2 Merge Commands
 ==================
@@ -2416,7 +2424,7 @@ Follow each command with <RET>.
 variable if it is set.  The default is system-dependent.
 
 \1f
-File: diffutils.info,  Node: Merging with patch,  Next: Making Patches,  Prev: Interactive Merging,  Up: Top
+File: diffutils.info-t,  Node: Merging with patch,  Next: Making Patches,  Prev: Interactive Merging,  Up: Top
 
 10 Merging with `patch'
 ***********************
@@ -2465,7 +2473,7 @@ each file F with its new version, putting reject hunks (if any) into
 * patch and Tradition::    GNU versus traditional `patch'.
 
 \1f
-File: diffutils.info,  Node: patch Input,  Next: Revision Control,  Up: Merging with patch
+File: diffutils.info-t,  Node: patch Input,  Next: Revision Control,  Up: Merging with patch
 
 10.1 Selecting the `patch' Input Format
 =======================================
@@ -2494,7 +2502,7 @@ format of diff.  The output formats listed here are the only ones that
      unified diff.
 
 \1f
-File: diffutils.info,  Node: Revision Control,  Next: Imperfect,  Prev: patch Input,  Up: Merging with patch
+File: diffutils.info-t,  Node: Revision Control,  Next: Imperfect,  Prev: patch Input,  Up: Merging with patch
 
 10.2 Revision Control
 =====================
@@ -2519,7 +2527,7 @@ value is zero if `patch' is conforming to POSIX, negative otherwise.
 `VERSION_CONTROL' environment variable (*note Backup Names::).
 
 \1f
-File: diffutils.info,  Node: Imperfect,  Next: Creating and Removing,  Prev: Revision Control,  Up: Merging with patch
+File: diffutils.info-t,  Node: Imperfect,  Next: Creating and Removing,  Prev: Revision Control,  Up: Merging with patch
 
 10.3 Applying Imperfect Patches
 ===============================
@@ -2546,7 +2554,7 @@ intervention or testing.
 * Dry Runs::            Predicting what `patch' will do.
 
 \1f
-File: diffutils.info,  Node: Changed White Space,  Next: Reversed Patches,  Up: Imperfect
+File: diffutils.info-t,  Node: Changed White Space,  Next: Reversed Patches,  Up: Imperfect
 
 10.3.1 Applying Patches with Changed White Space
 ------------------------------------------------
@@ -2562,7 +2570,7 @@ the input files.  Non-blank characters must still match exactly.  Each
 line of the context must still match a line in the input file.
 
 \1f
-File: diffutils.info,  Node: Reversed Patches,  Next: Inexact,  Prev: Changed White Space,  Up: Imperfect
+File: diffutils.info-t,  Node: Reversed Patches,  Next: Inexact,  Prev: Changed White Space,  Up: Imperfect
 
 10.3.2 Applying Reversed Patches
 --------------------------------
@@ -2592,7 +2600,7 @@ subsequent "apply anyway" question--or type `C-c' to kill the `patch'
 process.
 
 \1f
-File: diffutils.info,  Node: Inexact,  Next: Dry Runs,  Prev: Reversed Patches,  Up: Imperfect
+File: diffutils.info-t,  Node: Inexact,  Next: Dry Runs,  Prev: Reversed Patches,  Up: Imperfect
 
 10.3.3 Helping `patch' Find Inexact Matches
 -------------------------------------------
@@ -2659,7 +2667,7 @@ is applied to an exact copy of the file that the patch was generated
 from.
 
 \1f
-File: diffutils.info,  Node: Dry Runs,  Prev: Inexact,  Up: Imperfect
+File: diffutils.info-t,  Node: Dry Runs,  Prev: Inexact,  Up: Imperfect
 
 10.3.4 Predicting what `patch' will do
 --------------------------------------
@@ -2677,7 +2685,7 @@ patch you can apply it by invoking `patch' as before, but this time
 without the `--dry-run' option.
 
 \1f
-File: diffutils.info,  Node: Creating and Removing,  Next: Patching Time Stamps,  Prev: Imperfect,  Up: Merging with patch
+File: diffutils.info-t,  Node: Creating and Removing,  Next: Patching Time Stamps,  Prev: Imperfect,  Up: Merging with patch
 
 10.4 Creating and Removing Files
 ================================
@@ -2698,7 +2706,7 @@ does not appear to be one that removed the file.
 asks for confirmation before applying the patch.
 
 \1f
-File: diffutils.info,  Node: Patching Time Stamps,  Next: Multiple Patches,  Prev: Creating and Removing,  Up: Merging with patch
+File: diffutils.info-t,  Node: Patching Time Stamps,  Next: Multiple Patches,  Prev: Creating and Removing,  Up: Merging with patch
 
 10.5 Updating Time Stamps on Patched Files
 ==========================================
@@ -2740,7 +2748,7 @@ on the patched files, so that later invocations of `make' do not get
 confused by the patched files' times.
 
 \1f
-File: diffutils.info,  Node: Multiple Patches,  Next: patch Directories,  Prev: Patching Time Stamps,  Up: Merging with patch
+File: diffutils.info-t,  Node: Multiple Patches,  Next: patch Directories,  Prev: Patching Time Stamps,  Up: Merging with patch
 
 10.6 Multiple Patches in a File
 ===============================
@@ -2798,7 +2806,7 @@ first remaining name.
 POSIX.
 
 \1f
-File: diffutils.info,  Node: patch Directories,  Next: Backups,  Prev: Multiple Patches,  Up: Merging with patch
+File: diffutils.info-t,  Node: patch Directories,  Next: Backups,  Prev: Multiple Patches,  Up: Merging with patch
 
 10.7 Applying Patches in Other Directories
 ==========================================
@@ -2832,7 +2840,7 @@ in the current directory, or if you used the `-d DIRECTORY' option, in
 that directory.
 
 \1f
-File: diffutils.info,  Node: Backups,  Next: Backup Names,  Prev: patch Directories,  Up: Merging with patch
+File: diffutils.info-t,  Node: Backups,  Next: Backup Names,  Prev: patch Directories,  Up: Merging with patch
 
 10.8 Backup Files
 =================
@@ -2856,7 +2864,7 @@ backup file is created as a placeholder to represent the nonexistent
 file.
 
 \1f
-File: diffutils.info,  Node: Backup Names,  Next: Reject Names,  Prev: Backups,  Up: Merging with patch
+File: diffutils.info-t,  Node: Backup Names,  Next: Reject Names,  Prev: Backups,  Up: Merging with patch
 
 10.9 Backup File Names
 ======================
@@ -2928,7 +2936,7 @@ section have any affect, because no backups are made.
 use `~', but this should be fixed in the next release.
 
 \1f
-File: diffutils.info,  Node: Reject Names,  Next: patch Messages,  Prev: Backup Names,  Up: Merging with patch
+File: diffutils.info-t,  Node: Reject Names,  Next: patch Messages,  Prev: Backup Names,  Up: Merging with patch
 
 10.10 Reject File Names
 =======================
@@ -2944,7 +2952,7 @@ patches in a single file.  The `-r REJECT-FILE' or
 name.
 
 \1f
-File: diffutils.info,  Node: patch Messages,  Next: patch and POSIX,  Prev: Reject Names,  Up: Merging with patch
+File: diffutils.info-t,  Node: patch Messages,  Next: patch and POSIX,  Prev: Reject Names,  Up: Merging with patch
 
 10.11 Messages and Questions from `patch'
 =========================================
@@ -2968,7 +2976,7 @@ When applying a set of patches in a loop, you should check the exit
 status, so you don't apply a later patch to a partially patched file.
 
 \1f
-File: diffutils.info,  Node: More or Fewer Messages,  Next: patch and Keyboard Input,  Up: patch Messages
+File: diffutils.info-t,  Node: More or Fewer Messages,  Next: patch and Keyboard Input,  Up: patch Messages
 
 10.11.1 Controlling the Verbosity of `patch'
 --------------------------------------------
@@ -2983,7 +2991,7 @@ of patch it is.
 occurs, by using the `-s', `--quiet', or `--silent' option.
 
 \1f
-File: diffutils.info,  Node: patch and Keyboard Input,  Next: patch Quoting Style,  Prev: More or Fewer Messages,  Up: patch Messages
+File: diffutils.info-t,  Node: patch and Keyboard Input,  Next: patch Quoting Style,  Prev: More or Fewer Messages,  Up: patch Messages
 
 10.11.2 Inhibiting Keyboard Input
 ---------------------------------
@@ -3012,7 +3020,7 @@ questions, but it makes somewhat different assumptions:
    * Assume that patches are reversed if they look like they are.
 
 \1f
-File: diffutils.info,  Node: patch Quoting Style,  Prev: patch and Keyboard Input,  Up: patch Messages
+File: diffutils.info-t,  Node: patch Quoting Style,  Prev: patch and Keyboard Input,  Up: patch Messages
 
 10.11.3 `patch' Quoting Style
 -----------------------------
@@ -3047,7 +3055,7 @@ variable is not set, the default value is `shell', but this default may
 change in a future version of `patch'.
 
 \1f
-File: diffutils.info,  Node: patch and POSIX,  Next: patch and Tradition,  Prev: patch Messages,  Up: Merging with patch
+File: diffutils.info-t,  Node: patch and POSIX,  Next: patch and Tradition,  Prev: patch Messages,  Up: Merging with patch
 
 10.12 `patch' and the POSIX Standard
 ====================================
@@ -3072,7 +3080,7 @@ standard, as follows:
 
 
 \1f
-File: diffutils.info,  Node: patch and Tradition,  Prev: patch and POSIX,  Up: Merging with patch
+File: diffutils.info-t,  Node: patch and Tradition,  Prev: patch and POSIX,  Up: Merging with patch
 
 10.13 GNU `patch' and Traditional `patch'
 =========================================
@@ -3151,7 +3159,7 @@ version 2.1 and earlier.
 
 
 \1f
-File: diffutils.info,  Node: Making Patches,  Next: Invoking cmp,  Prev: Merging with patch,  Up: Top
+File: diffutils.info-t,  Node: Making Patches,  Next: Invoking cmp,  Prev: Merging with patch,  Up: Top
 
 11 Tips for Making and Using Patches
 ************************************
@@ -3172,7 +3180,7 @@ to distribute patches for updating a software package.
 * Generating Smaller Patches::  How to generate smaller patches.
 
 \1f
-File: diffutils.info,  Node: Tips for Patch Producers,  Next: Tips for Patch Consumers,  Up: Making Patches
+File: diffutils.info-t,  Node: Tips for Patch Producers,  Next: Tips for Patch Consumers,  Up: Making Patches
 
 11.1 Tips for Patch Producers
 =============================
@@ -3201,7 +3209,7 @@ recipient and applying your patches to a copy of the original files.
 when generating a patch.
 
 \1f
-File: diffutils.info,  Node: Tips for Patch Consumers,  Next: Avoiding Common Mistakes,  Prev: Tips for Patch Producers,  Up: Making Patches
+File: diffutils.info-t,  Node: Tips for Patch Consumers,  Next: Avoiding Common Mistakes,  Prev: Tips for Patch Producers,  Up: Making Patches
 
 11.2 Tips for Patch Consumers
 =============================
@@ -3216,7 +3224,7 @@ cannot patch such files.  If you are having trouble applying such
 patches, try upgrading to a recent version of GNU `patch'.
 
 \1f
-File: diffutils.info,  Node: Avoiding Common Mistakes,  Next: Generating Smaller Patches,  Prev: Tips for Patch Consumers,  Up: Making Patches
+File: diffutils.info-t,  Node: Avoiding Common Mistakes,  Next: Generating Smaller Patches,  Prev: Tips for Patch Consumers,  Up: Making Patches
 
 11.3 Avoiding Common Mistakes
 =============================
@@ -3268,7 +3276,7 @@ proceeding.  This makes it difficult to accidentally apply patches in
 the wrong order.
 
 \1f
-File: diffutils.info,  Node: Generating Smaller Patches,  Prev: Avoiding Common Mistakes,  Up: Making Patches
+File: diffutils.info-t,  Node: Generating Smaller Patches,  Prev: Avoiding Common Mistakes,  Up: Making Patches
 
 11.4 Generating Smaller Patches
 ===============================
@@ -3303,7 +3311,7 @@ but bear in mind that `patch' typically needs at least two lines for
 proper operation when patches do not exactly match the input files.
 
 \1f
-File: diffutils.info,  Node: Invoking cmp,  Next: Invoking diff,  Prev: Making Patches,  Up: Top
+File: diffutils.info-t,  Node: Invoking cmp,  Next: Invoking diff,  Prev: Making Patches,  Up: Top
 
 12 Invoking `cmp'
 *****************
@@ -3343,7 +3351,7 @@ differences were found, and 2 means trouble.
 * cmp Options:: Summary of options to `cmp'.
 
 \1f
-File: diffutils.info,  Node: cmp Options,  Up: Invoking cmp
+File: diffutils.info-t,  Node: cmp Options,  Up: Invoking cmp
 
 12.1 Options to `cmp'
 =====================
@@ -3375,8 +3383,11 @@ can be combined into a single command line word: `-bl' is equivalent to
 `-l'
 `--verbose'
      Output the (decimal) byte numbers and (octal) values of all
-     differing bytes, instead of the default standard output.  Also,
-     output the EOF message if one file is shorter than the other.
+     differing bytes, instead of the default standard output.  Each
+     output line contains a differing byte's number relative to the
+     start of the input, followed by the differing byte values.  Byte
+     numbers start at 1.  Also, output the EOF message if one file is
+     shorter than the other.
 
 `-n COUNT'
 `--bytes=COUNT'
@@ -3471,7 +3482,7 @@ rejected by your computer due to limitations of its arithmetic.
      extension to IEC 60027-2.)
 
 \1f
-File: diffutils.info,  Node: Invoking diff,  Next: Invoking diff3,  Prev: Invoking cmp,  Up: Top
+File: diffutils.info-t,  Node: Invoking diff,  Next: Invoking diff3,  Prev: Invoking cmp,  Up: Top
 
 13 Invoking `diff'
 ******************
@@ -3516,7 +3527,7 @@ binary files count as trouble, but this can be altered by using the
 * diff Options:: Summary of options to `diff'.
 
 \1f
-File: diffutils.info,  Node: diff Options,  Up: Invoking diff
+File: diffutils.info-t,  Node: diff Options,  Up: Invoking diff
 
 13.1 Options to `diff'
 ======================
@@ -3647,8 +3658,7 @@ optional argument.
 
 `-N'
 `--new-file'
-     In directory comparison, if a file is found in only one directory,
-     treat it as present but empty in the other directory.  *Note
+     If one file is missing, treat it as present but empty.  *Note
      Comparing Directories::.
 
 `--new-group-format=FORMAT'
@@ -3659,6 +3669,9 @@ optional argument.
      Use FORMAT to output a line taken from just the second file in
      if-then-else format.  *Note Line Formats::.
 
+`--no-dereference'
+     Act on symbolic links themselves instead of what they point to.
+
 `--old-group-format=FORMAT'
      Use FORMAT to output a group of lines taken from just the first
      file in if-then-else format.  *Note Line Group Formats::.
@@ -3740,9 +3753,8 @@ optional argument.
      format.  *Note Line Formats::.
 
 `--unidirectional-new-file'
-     When comparing directories, if a file appears only in the second
-     directory of the two, treat it as present but empty in the other.
-     *Note Comparing Directories::.
+     If a first file is missing, treat it as present but empty.  *Note
+     Comparing Directories::.
 
 `-U LINES'
 `--unified[=LINES]'
@@ -3789,7 +3801,7 @@ optional argument.
      Ignore white space at line end.  *Note White Space::.
 
 \1f
-File: diffutils.info,  Node: Invoking diff3,  Next: Invoking patch,  Prev: Invoking diff,  Up: Top
+File: diffutils.info-t,  Node: Invoking diff3,  Next: Invoking patch,  Prev: Invoking diff,  Up: Top
 
 14 Invoking `diff3'
 *******************
@@ -3811,7 +3823,7 @@ conflicts were found, and 2 means trouble.
 * diff3 Options:: Summary of options to `diff3'.
 
 \1f
-File: diffutils.info,  Node: diff3 Options,  Up: Invoking diff3
+File: diffutils.info-t,  Node: diff3 Options,  Up: Invoking diff3
 
 14.1 Options to `diff3'
 =======================
@@ -3908,7 +3920,7 @@ combined into a single command line argument.
      Which Changes::.
 
 \1f
-File: diffutils.info,  Node: Invoking patch,  Next: Invoking sdiff,  Prev: Invoking diff3,  Up: Top
+File: diffutils.info-t,  Node: Invoking patch,  Next: Invoking sdiff,  Prev: Invoking diff3,  Up: Top
 
 15 Invoking `patch'
 *******************
@@ -3943,7 +3955,7 @@ if FILE is one of the input files.
 * patch Options::     Summary table of options to `patch'.
 
 \1f
-File: diffutils.info,  Node: patch Options,  Up: Invoking patch
+File: diffutils.info-t,  Node: patch Options,  Up: Invoking patch
 
 15.1 Options to `patch'
 =======================
@@ -4126,7 +4138,7 @@ combined into a single command line argument with only one dash.
 
 
 \1f
-File: diffutils.info,  Node: Invoking sdiff,  Next: Standards conformance,  Prev: Invoking patch,  Up: Top
+File: diffutils.info-t,  Node: Invoking sdiff,  Next: Standards conformance,  Prev: Invoking patch,  Up: Top
 
 16 Invoking `sdiff'
 *******************
@@ -4158,7 +4170,7 @@ differences were found, and 2 means trouble.
 * sdiff Options:: Summary of options to `diff'.
 
 \1f
-File: diffutils.info,  Node: sdiff Options,  Up: Invoking sdiff
+File: diffutils.info-t,  Node: sdiff Options,  Up: Invoking sdiff
 
 16.1 Options to `sdiff'
 =======================
@@ -4262,7 +4274,7 @@ options can be abbreviated to any unique prefix of their name.
      Ignore white space at line end.  *Note White Space::.
 
 \1f
-File: diffutils.info,  Node: Standards conformance,  Next: Projects,  Prev: Invoking sdiff,  Up: Top
+File: diffutils.info-t,  Node: Standards conformance,  Next: Projects,  Prev: Invoking sdiff,  Up: Top
 
 17 Standards conformance
 ************************
@@ -4297,7 +4309,7 @@ around the compatibility problems by setting `_POSIX2_VERSION=199209'
 in your environment.
 
 \1f
-File: diffutils.info,  Node: Projects,  Next: Copying This Manual,  Prev: Standards conformance,  Up: Top
+File: diffutils.info-t,  Node: Projects,  Next: Copying This Manual,  Prev: Standards conformance,  Up: Top
 
 18 Future Projects
 ******************
@@ -4318,7 +4330,7 @@ to coordinate with other volunteers.
 * Bugs::         Reporting bugs.
 
 \1f
-File: diffutils.info,  Node: Shortcomings,  Next: Bugs,  Up: Projects
+File: diffutils.info-t,  Node: Shortcomings,  Next: Bugs,  Up: Projects
 
 18.1 Suggested Projects for Improving GNU `diff' and `patch'
 ============================================================
@@ -4341,7 +4353,7 @@ These shortcomings motivate the following suggested projects.
 * Speedups::             Improving performance.
 
 \1f
-File: diffutils.info,  Node: Internationalization,  Next: Changing Structure,  Up: Shortcomings
+File: diffutils.info-t,  Node: Internationalization,  Next: Changing Structure,  Up: Shortcomings
 
 18.1.1 Handling Multibyte and Varying-Width Characters
 ------------------------------------------------------
@@ -4366,7 +4378,7 @@ Unfortunately, these patches are incomplete and are to an older version
 of `diff', so more work needs to be done in this area.
 
 \1f
-File: diffutils.info,  Node: Changing Structure,  Next: Special Files,  Prev: Internationalization,  Up: Shortcomings
+File: diffutils.info-t,  Node: Changing Structure,  Next: Special Files,  Prev: Internationalization,  Up: Shortcomings
 
 18.1.2 Handling Changes to the Directory Structure
 --------------------------------------------------
@@ -4389,7 +4401,7 @@ represent changes in directory structure, and extending `patch' to
 understand these extensions.
 
 \1f
-File: diffutils.info,  Node: Special Files,  Next: Unusual File Names,  Prev: Changing Structure,  Up: Shortcomings
+File: diffutils.info-t,  Node: Special Files,  Next: Unusual File Names,  Prev: Changing Structure,  Up: Shortcomings
 
 18.1.3 Files that are Neither Directories Nor Regular Files
 -----------------------------------------------------------
@@ -4410,7 +4422,7 @@ files, instead of the change to the symbolic link.
 and `patch' should be extended to understand these extensions.
 
 \1f
-File: diffutils.info,  Node: Unusual File Names,  Next: Time Stamp Order,  Prev: Special Files,  Up: Shortcomings
+File: diffutils.info-t,  Node: Unusual File Names,  Next: Time Stamp Order,  Prev: Special Files,  Up: Shortcomings
 
 18.1.4 File Names that Contain Unusual Characters
 -------------------------------------------------
@@ -4423,7 +4435,7 @@ that is syntactically correct but patches the wrong files.  The format
 of `diff' output should be extended to handle all possible file names.
 
 \1f
-File: diffutils.info,  Node: Time Stamp Order,  Next: Ignoring Changes,  Prev: Unusual File Names,  Up: Shortcomings
+File: diffutils.info-t,  Node: Time Stamp Order,  Next: Ignoring Changes,  Prev: Unusual File Names,  Up: Shortcomings
 
 18.1.5 Outputting Diffs in Time Stamp Order
 -------------------------------------------
@@ -4437,7 +4449,7 @@ way to do this would be to implement a `diff' option to output diffs in
 time stamp order.
 
 \1f
-File: diffutils.info,  Node: Ignoring Changes,  Next: Speedups,  Prev: Time Stamp Order,  Up: Shortcomings
+File: diffutils.info-t,  Node: Ignoring Changes,  Next: Speedups,  Prev: Time Stamp Order,  Up: Shortcomings
 
 18.1.6 Ignoring Certain Changes
 -------------------------------
@@ -4459,7 +4471,7 @@ e.g.:
    However, this outputs the filtered text, not the original.
 
 \1f
-File: diffutils.info,  Node: Speedups,  Prev: Ignoring Changes,  Up: Shortcomings
+File: diffutils.info-t,  Node: Speedups,  Prev: Ignoring Changes,  Up: Shortcomings
 
 18.1.7 Improving Performance
 ----------------------------
@@ -4471,7 +4483,7 @@ originally copied from the other with time stamps preserved (e.g., with
 the same content.  *Note diff Performance::.
 
 \1f
-File: diffutils.info,  Node: Bugs,  Prev: Shortcomings,  Up: Projects
+File: diffutils.info-t,  Node: Bugs,  Prev: Shortcomings,  Up: Projects
 
 18.2 Reporting Bugs
 ===================
@@ -4490,7 +4502,7 @@ patch is relative to a recent test release, which you can find in the
 directory `ftp://alpha.gnu.org/gnu/diffutils/'.
 
 \1f
-File: diffutils.info,  Node: Copying This Manual,  Next: Translations,  Prev: Projects,  Up: Top
+File: diffutils.info-t,  Node: Copying This Manual,  Next: Translations,  Prev: Projects,  Up: Top
 
 Appendix A Copying This Manual
 ******************************
@@ -4976,7 +4988,7 @@ free software license, such as the GNU General Public License, to
 permit their use in free software.
 
 \1f
-File: diffutils.info,  Node: Translations,  Next: Index,  Prev: Copying This Manual,  Up: Top
+File: diffutils.info-t,  Node: Translations,  Next: Index,  Prev: Copying This Manual,  Up: Top
 
 Appendix B Translations of This Manual
 **************************************
@@ -4986,7 +4998,7 @@ translation of this manual.  Its most recent version can be found at
 `http://openlab.ring.gr.jp/gnujdoc/cvsweb/cvsweb.cgi/gnujdoc/'.
 
 \1f
-File: diffutils.info,  Node: Index,  Prev: Translations,  Up: Top
+File: diffutils.info-t,  Node: Index,  Prev: Translations,  Up: Top
 
 Appendix C Index
 ****************
@@ -5041,8 +5053,8 @@ Appendix C Index
 * EDITOR:                                Merge Commands.      (line  50)
 * empty files, removing:                 Creating and Removing.
                                                               (line   6)
-* exabyte, definition of:                cmp Options.         (line 106)
-* exbibyte, definition of:               cmp Options.         (line 110)
+* exabyte, definition of:                cmp Options.         (line 109)
+* exbibyte, definition of:               cmp Options.         (line 113)
 * file name alternates:                  Alternate Names.     (line   6)
 * file names with unusual characters:    Unusual File Names.  (line   6)
 * format of diff output:                 Output Formats.      (line   6)
@@ -5053,8 +5065,8 @@ Appendix C Index
 * full lines:                            Incomplete Lines.    (line   6)
 * function headings, C:                  C Function Headings. (line   6)
 * fuzz factor when patching:             Inexact.             (line   6)
-* gibibyte, definition of:               cmp Options.         (line  89)
-* gigabyte, definition of:               cmp Options.         (line  85)
+* gibibyte, definition of:               cmp Options.         (line  92)
+* gigabyte, definition of:               cmp Options.         (line  88)
 * headings:                              Sections.            (line   6)
 * hunks:                                 Hunks.               (line   6)
 * hunks for diff3:                       diff3 Hunks.         (line   6)
@@ -5077,16 +5089,16 @@ Appendix C Index
 * invoking sdiff:                        Invoking sdiff.      (line   6)
 * keyboard input to patch:               patch and Keyboard Input.
                                                               (line   6)
-* kibibyte, definition of:               cmp Options.         (line  73)
-* kilobyte, definition of:               cmp Options.         (line  68)
+* kibibyte, definition of:               cmp Options.         (line  76)
+* kilobyte, definition of:               cmp Options.         (line  71)
 * LC_COLLATE:                            Comparing Directories.
                                                               (line   6)
 * LC_NUMERIC:                            Line Group Formats.  (line 144)
 * LC_TIME:                               Detailed Context.    (line  12)
 * line formats:                          Line Formats.        (line   6)
 * line group formats:                    Line Group Formats.  (line   6)
-* mebibyte, definition of:               cmp Options.         (line  82)
-* megabyte, definition of:               cmp Options.         (line  78)
+* mebibyte, definition of:               cmp Options.         (line  85)
+* megabyte, definition of:               cmp Options.         (line  81)
 * merge commands:                        Merge Commands.      (line   6)
 * merged diff3 format:                   Bypassing ed.        (line   6)
 * merged output format:                  If-then-else.        (line   6)
@@ -5123,9 +5135,9 @@ Appendix C Index
 * patches, shrinking:                    Generating Smaller Patches.
                                                               (line   6)
 * patching directories:                  patch Directories.   (line   6)
-* pebibyte, definition of:               cmp Options.         (line 103)
+* pebibyte, definition of:               cmp Options.         (line 106)
 * performance of diff:                   diff Performance.    (line   6)
-* petabyte, definition of:               cmp Options.         (line  99)
+* petabyte, definition of:               cmp Options.         (line 102)
 * POSIX <1>:                             Standards conformance.
                                                               (line   6)
 * POSIX:                                 patch and POSIX.     (line   6)
@@ -5164,8 +5176,8 @@ Appendix C Index
                                                               (line   6)
 * tab and blank difference suppression:  White Space.         (line   6)
 * tab stop alignment:                    Tabs.                (line   6)
-* tebibyte, definition of:               cmp Options.         (line  96)
-* terabyte, definition of:               cmp Options.         (line  92)
+* tebibyte, definition of:               cmp Options.         (line  99)
+* terabyte, definition of:               cmp Options.         (line  95)
 * testing patch:                         Dry Runs.            (line   6)
 * text versus binary diff:               Binary.              (line   6)
 * time stamp format, context diffs:      Detailed Context.    (line  12)
@@ -5185,124 +5197,124 @@ Appendix C Index
 * VERSION_CONTROL <1>:                   Backup Names.        (line  21)
 * VERSION_CONTROL:                       Revision Control.    (line  22)
 * white space in patches:                Changed White Space. (line   6)
-* yottabyte, definition of:              cmp Options.         (line 121)
-* zettabyte, definition of:              cmp Options.         (line 113)
+* yottabyte, definition of:              cmp Options.         (line 124)
+* zettabyte, definition of:              cmp Options.         (line 116)
 
 
 \1f
 Tag Table:
-Node: Top\7f1433
-Node: Overview\7f3646
-Node: Comparison\7f7275
-Node: Hunks\7f9978
-Node: White Space\7f11420
-Node: Blank Lines\7f13259
-Node: Specified Lines\7f14251
-Node: Case Folding\7f15377
-Node: Brief\7f15794
-Node: Binary\7f17117
-Node: Output Formats\7f21202
-Node: Sample diff Input\7f21927
-Node: Context\7f23426
-Node: Context Format\7f25003
-Node: Example Context\7f25795
-Node: Less Context\7f27302
-Node: Detailed Context\7f28491
-Node: Unified Format\7f30689
-Node: Example Unified\7f31486
-Node: Detailed Unified\7f32524
-Node: Sections\7f34171
-Node: Specified Headings\7f34930
-Node: C Function Headings\7f36481
-Node: Alternate Names\7f37326
-Node: Side by Side\7f38240
-Node: Side by Side Format\7f40389
-Node: Example Side by Side\7f41290
-Node: Normal\7f42630
-Node: Example Normal\7f43630
-Node: Detailed Normal\7f44366
-Node: Scripts\7f46105
-Node: ed Scripts\7f46510
-Node: Example ed\7f47716
-Node: Detailed ed\7f48166
-Node: Forward ed\7f49925
-Node: RCS\7f50701
-Node: If-then-else\7f51916
-Node: Line Group Formats\7f53594
-Node: Line Formats\7f59470
-Node: Example If-then-else\7f62740
-Node: Detailed If-then-else\7f63819
-Node: Incomplete Lines\7f65702
-Node: Comparing Directories\7f67339
-Node: Adjusting Output\7f71383
-Node: Tabs\7f71890
-Node: Trailing Blanks\7f73504
-Node: Pagination\7f74730
-Node: diff Performance\7f75198
-Node: Comparing Three Files\7f78285
-Node: Sample diff3 Input\7f79163
-Node: Example diff3 Normal\7f80111
-Node: Detailed diff3 Normal\7f81161
-Node: diff3 Hunks\7f82920
-Node: diff3 Merging\7f84216
-Node: Which Changes\7f86460
-Node: Marking Conflicts\7f87860
-Node: Bypassing ed\7f90316
-Node: Merging Incomplete Lines\7f91659
-Node: Saving the Changed File\7f92385
-Node: Interactive Merging\7f93001
-Node: sdiff Option Summary\7f93710
-Node: Merge Commands\7f94913
-Node: Merging with patch\7f96202
-Node: patch Input\7f98574
-Node: Revision Control\7f99256
-Node: Imperfect\7f100426
-Node: Changed White Space\7f101574
-Node: Reversed Patches\7f102371
-Node: Inexact\7f103835
-Node: Dry Runs\7f107393
-Node: Creating and Removing\7f108257
-Node: Patching Time Stamps\7f109306
-Node: Multiple Patches\7f111505
-Node: patch Directories\7f114168
-Node: Backups\7f115793
-Node: Backup Names\7f116858
-Ref: Backup Names-Footnote-1\7f119825
-Node: Reject Names\7f119952
-Node: patch Messages\7f120541
-Node: More or Fewer Messages\7f121601
-Node: patch and Keyboard Input\7f122232
-Node: patch Quoting Style\7f123261
-Node: patch and POSIX\7f124411
-Node: patch and Tradition\7f125251
-Node: Making Patches\7f128707
-Node: Tips for Patch Producers\7f129533
-Node: Tips for Patch Consumers\7f130789
-Node: Avoiding Common Mistakes\7f131426
-Node: Generating Smaller Patches\7f133951
-Node: Invoking cmp\7f135712
-Node: cmp Options\7f137135
-Node: Invoking diff\7f140627
-Node: diff Options\7f142483
-Node: Invoking diff3\7f151185
-Node: diff3 Options\7f151823
-Node: Invoking patch\7f154856
-Node: patch Options\7f156064
-Node: Invoking sdiff\7f161291
-Node: sdiff Options\7f162434
-Node: Standards conformance\7f165405
-Node: Projects\7f167151
-Node: Shortcomings\7f167862
-Node: Internationalization\7f168964
-Node: Changing Structure\7f170130
-Node: Special Files\7f171234
-Node: Unusual File Names\7f172346
-Node: Time Stamp Order\7f172985
-Node: Ignoring Changes\7f173628
-Node: Speedups\7f174398
-Node: Bugs\7f174862
-Node: Copying This Manual\7f175715
-Node: Translations\7f200854
-Node: Index\7f201226
+Node: Top\7f1434
+Node: Overview\7f3648
+Node: Comparison\7f7279
+Node: Hunks\7f9984
+Node: White Space\7f11428
+Node: Blank Lines\7f13269
+Node: Specified Lines\7f14263
+Node: Case Folding\7f15391
+Node: Brief\7f15810
+Node: Binary\7f17135
+Node: Output Formats\7f21222
+Node: Sample diff Input\7f21949
+Node: Context\7f23450
+Node: Context Format\7f25029
+Node: Example Context\7f25823
+Node: Less Context\7f27332
+Node: Detailed Context\7f28523
+Node: Unified Format\7f30723
+Node: Example Unified\7f31522
+Node: Detailed Unified\7f32562
+Node: Sections\7f34207
+Node: Specified Headings\7f34968
+Node: C Function Headings\7f36521
+Node: Alternate Names\7f37368
+Node: Side by Side\7f38284
+Node: Side by Side Format\7f40436
+Node: Example Side by Side\7f41339
+Node: Normal\7f42681
+Node: Example Normal\7f43683
+Node: Detailed Normal\7f44421
+Node: Scripts\7f46162
+Node: ed Scripts\7f46569
+Node: Example ed\7f47777
+Node: Detailed ed\7f48229
+Node: Forward ed\7f49990
+Node: RCS\7f50768
+Node: If-then-else\7f51985
+Node: Line Group Formats\7f53665
+Node: Line Formats\7f59543
+Node: Example If-then-else\7f62815
+Node: Detailed If-then-else\7f63896
+Node: Incomplete Lines\7f65782
+Node: Comparing Directories\7f67422
+Node: Adjusting Output\7f71856
+Node: Tabs\7f72365
+Node: Trailing Blanks\7f73981
+Node: Pagination\7f75209
+Node: diff Performance\7f75679
+Node: Comparing Three Files\7f78768
+Node: Sample diff3 Input\7f79648
+Node: Example diff3 Normal\7f80598
+Node: Detailed diff3 Normal\7f81660
+Node: diff3 Hunks\7f83450
+Node: diff3 Merging\7f84719
+Node: Which Changes\7f86965
+Node: Marking Conflicts\7f88367
+Node: Bypassing ed\7f90825
+Node: Merging Incomplete Lines\7f92170
+Node: Saving the Changed File\7f92898
+Node: Interactive Merging\7f93516
+Node: sdiff Option Summary\7f94227
+Node: Merge Commands\7f95432
+Node: Merging with patch\7f96723
+Node: patch Input\7f99097
+Node: Revision Control\7f99781
+Node: Imperfect\7f100953
+Node: Changed White Space\7f102103
+Node: Reversed Patches\7f102902
+Node: Inexact\7f104368
+Node: Dry Runs\7f107928
+Node: Creating and Removing\7f108794
+Node: Patching Time Stamps\7f109845
+Node: Multiple Patches\7f112046
+Node: patch Directories\7f114711
+Node: Backups\7f116338
+Node: Backup Names\7f117405
+Ref: Backup Names-Footnote-1\7f120374
+Node: Reject Names\7f120501
+Node: patch Messages\7f121092
+Node: More or Fewer Messages\7f122154
+Node: patch and Keyboard Input\7f122787
+Node: patch Quoting Style\7f123818
+Node: patch and POSIX\7f124970
+Node: patch and Tradition\7f125812
+Node: Making Patches\7f129270
+Node: Tips for Patch Producers\7f130098
+Node: Tips for Patch Consumers\7f131356
+Node: Avoiding Common Mistakes\7f131995
+Node: Generating Smaller Patches\7f134522
+Node: Invoking cmp\7f136285
+Node: cmp Options\7f137710
+Node: Invoking diff\7f141373
+Node: diff Options\7f143231
+Node: Invoking diff3\7f151877
+Node: diff3 Options\7f152517
+Node: Invoking patch\7f155552
+Node: patch Options\7f156762
+Node: Invoking sdiff\7f161991
+Node: sdiff Options\7f163136
+Node: Standards conformance\7f166109
+Node: Projects\7f167857
+Node: Shortcomings\7f168570
+Node: Internationalization\7f169674
+Node: Changing Structure\7f170842
+Node: Special Files\7f171948
+Node: Unusual File Names\7f173062
+Node: Time Stamp Order\7f173703
+Node: Ignoring Changes\7f174348
+Node: Speedups\7f175120
+Node: Bugs\7f175586
+Node: Copying This Manual\7f176441
+Node: Translations\7f201582
+Node: Index\7f201956
 \1f
 End Tag Table
diff --git a/contrib/diffutils/lib/allocator.c b/contrib/diffutils/lib/allocator.c
new file mode 100644 (file)
index 0000000..2c1a3da
--- /dev/null
@@ -0,0 +1,5 @@
+#define _GL_USE_STDLIB_ALLOC 1
+#include <config.h>
+#include "allocator.h"
+#include <stdlib.h>
+struct allocator const stdlib_allocator = { malloc, realloc, free, NULL };
diff --git a/contrib/diffutils/lib/allocator.h b/contrib/diffutils/lib/allocator.h
new file mode 100644 (file)
index 0000000..b71fbbb
--- /dev/null
@@ -0,0 +1,58 @@
+/* Memory allocators such as malloc+free.
+
+   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert.  */
+
+#ifndef _GL_ALLOCATOR_H
+#define _GL_ALLOCATOR_H
+
+#include <stddef.h>
+
+/* An object describing a memory allocator family.  */
+
+struct allocator
+{
+  /* Do not use GCC attributes such as __attribute__ ((malloc)) with
+     the function types pointed at by these members, because these
+     attributes do not work with pointers to functions.  See
+     <http://lists.gnu.org/archive/html/bug-gnulib/2011-04/msg00007.html>.  */
+
+  /* Call ALLOCATE to allocate memory, like 'malloc'.  On failure ALLOCATE
+     should return NULL, though not necessarily set errno.  When given
+     a zero size it may return NULL even if successful.  */
+  void *(*allocate) (size_t);
+
+  /* If nonnull, call REALLOCATE to reallocate memory, like 'realloc'.
+     On failure REALLOCATE should return NULL, though not necessarily set
+     errno.  When given a zero size it may return NULL even if
+     successful.  */
+  void *(*reallocate) (void *, size_t);
+
+  /* Call FREE to free memory, like 'free'.  */
+  void (*free) (void *);
+
+  /* If nonnull, call DIE (SIZE) if MALLOC (SIZE) or REALLOC (...,
+     SIZE) fails.  DIE should not return.  SIZE should equal SIZE_MAX
+     if size_t overflow was detected while calculating sizes to be
+     passed to MALLOC or REALLOC.  */
+  void (*die) (size_t);
+};
+
+/* An allocator using the stdlib functions and a null DIE function.  */
+extern struct allocator const stdlib_allocator;
+
+#endif /* _GL_ALLOCATOR_H */
index e23746a..1d2fca4 100644 (file)
@@ -1,6 +1,6 @@
 /* anytostr.c -- convert integers to printable strings
 
-   Copyright (C) 2001, 2006, 2008-2011 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2006, 2008-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/contrib/diffutils/lib/areadlink.c b/contrib/diffutils/lib/areadlink.c
new file mode 100644 (file)
index 0000000..7b81685
--- /dev/null
@@ -0,0 +1,56 @@
+/* areadlink.c -- readlink wrapper to return the link name in malloc'd storage
+   Unlike xreadlink and xreadlink_with_size, don't ever call exit.
+
+   Copyright (C) 2001, 2003-2007, 2009-2013 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Jim Meyering <jim@meyering.net>
+   and Bruno Haible <bruno@clisp.org>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "areadlink.h"
+
+#include "careadlinkat.h"
+
+#include <stdlib.h>
+#include <unistd.h>
+
+/* Get the symbolic link value of FILENAME and put it into BUFFER, with
+   size BUFFER_SIZE.  This function acts like readlink but has
+   readlinkat's signature.  */
+static ssize_t
+careadlinkatcwd (int fd, char const *filename, char *buffer,
+                 size_t buffer_size)
+{
+  /* FD must be AT_FDCWD here, otherwise the caller is using this
+     function in contexts it was not meant for.  */
+  if (fd != AT_FDCWD)
+    abort ();
+  return readlink (filename, buffer, buffer_size);
+}
+
+/* Call readlink to get the symbolic link value of FILENAME.
+   Return a pointer to that NUL-terminated string in malloc'd storage.
+   If readlink fails, return NULL and set errno.
+   If allocation fails, or if the link value is longer than SIZE_MAX :-),
+   return NULL and set errno to ENOMEM.  */
+
+char *
+areadlink (char const *filename)
+{
+  return careadlinkat (AT_FDCWD, filename, NULL, 0, NULL, careadlinkatcwd);
+}
similarity index 56%
copy from contrib/diffutils/lib/strnlen1.h
copy to contrib/diffutils/lib/areadlink.h
index 1bb13de..5870ce5 100644 (file)
@@ -1,5 +1,7 @@
-/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
-   Copyright (C) 2005, 2009-2011 Free Software Foundation, Inc.
+/* Read symbolic links without size limitation.
+
+   Copyright (C) 2001, 2003-2004, 2007, 2009-2013 Free Software Foundation,
+   Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifndef _STRNLEN1_H
-#define _STRNLEN1_H
+/* Written by Jim Meyering <jim@meyering.net>  */
 
 #include <stddef.h>
 
+extern char *areadlink (char const *filename);
+extern char *areadlink_with_size (char const *filename, size_t size_hint);
 
-#ifdef __cplusplus
-extern "C" {
+#if GNULIB_AREADLINKAT
+extern char *areadlinkat (int fd, char const *filename);
 #endif
 
-
-/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
-   If no '\0' terminator is found in that many characters, return MAXLEN.  */
-/* This is the same as strnlen (string, maxlen - 1) + 1.  */
-extern size_t strnlen1 (const char *string, size_t maxlen);
-
-
-#ifdef __cplusplus
-}
+#if GNULIB_AREADLINKAT_WITH_SIZE
+extern char *areadlinkat_with_size (int fd, char const *filename,
+                                    size_t size_hint);
 #endif
-
-
-#endif /* _STRNLEN1_H */
diff --git a/contrib/diffutils/lib/asnprintf.c b/contrib/diffutils/lib/asnprintf.c
new file mode 100644 (file)
index 0000000..76e228d
--- /dev/null
@@ -0,0 +1,34 @@
+/* Formatted output to strings.
+   Copyright (C) 1999, 2002, 2006, 2009-2013 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with this program; if not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "vasnprintf.h"
+
+#include <stdarg.h>
+
+char *
+asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
+{
+  va_list args;
+  char *result;
+
+  va_start (args, format);
+  result = vasnprintf (resultbuf, lengthp, format, args);
+  va_end (args);
+  return result;
+}
diff --git a/contrib/diffutils/lib/asprintf.c b/contrib/diffutils/lib/asprintf.c
new file mode 100644 (file)
index 0000000..713dae1
--- /dev/null
@@ -0,0 +1,39 @@
+/* Formatted output to strings.
+   Copyright (C) 1999, 2002, 2006-2007, 2009-2013 Free Software Foundation,
+   Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with this program; if not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#ifdef IN_LIBASPRINTF
+# include "vasprintf.h"
+#else
+# include <stdio.h>
+#endif
+
+#include <stdarg.h>
+
+int
+asprintf (char **resultp, const char *format, ...)
+{
+  va_list args;
+  int result;
+
+  va_start (args, format);
+  result = vasprintf (resultp, format, args);
+  va_end (args);
+  return result;
+}
index 529bc35..9307e83 100644 (file)
@@ -1,6 +1,6 @@
 /* basename.c -- return the last element in a file name
 
-   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2011 Free Software
+   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2013 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
index 90ac501..d73fd41 100644 (file)
@@ -1,6 +1,6 @@
 /* basename.c -- return the last element in a file name
 
-   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2011 Free Software
+   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2013 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -40,8 +40,8 @@ base_name (char const *name)
   if (ISSLASH (base[length]))
     length++;
 
-  /* On systems with drive letters, `a/b:c' must return `./b:c' rather
-     than `b:c' to avoid confusion with a drive letter.  On systems
+  /* On systems with drive letters, "a/b:c" must return "./b:c" rather
+     than "b:c" to avoid confusion with a drive letter.  On systems
      with pure POSIX semantics, this is not an issue.  */
   if (FILE_SYSTEM_PREFIX_LEN (base))
     {
diff --git a/contrib/diffutils/lib/binary-io.c b/contrib/diffutils/lib/binary-io.c
new file mode 100644 (file)
index 0000000..8bbdb44
--- /dev/null
@@ -0,0 +1,3 @@
+#include <config.h>
+#define BINARY_IO_INLINE _GL_EXTERN_INLINE
+#include "binary-io.h"
diff --git a/contrib/diffutils/lib/binary-io.h b/contrib/diffutils/lib/binary-io.h
new file mode 100644 (file)
index 0000000..317fe3d
--- /dev/null
@@ -0,0 +1,72 @@
+/* Binary mode I/O.
+   Copyright (C) 2001, 2003, 2005, 2008-2013 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BINARY_H
+#define _BINARY_H
+
+/* For systems that distinguish between text and binary I/O.
+   O_BINARY is guaranteed by the gnulib <fcntl.h>. */
+#include <fcntl.h>
+
+/* The MSVC7 <stdio.h> doesn't like to be included after '#define fileno ...',
+   so we include it here first.  */
+#include <stdio.h>
+
+_GL_INLINE_HEADER_BEGIN
+#ifndef BINARY_IO_INLINE
+# define BINARY_IO_INLINE _GL_INLINE
+#endif
+
+/* set_binary_mode (fd, mode)
+   sets the binary/text I/O mode of file descriptor fd to the given mode
+   (must be O_BINARY or O_TEXT) and returns the previous mode.  */
+#if O_BINARY
+# if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__
+#  include <io.h> /* declares setmode() */
+#  define set_binary_mode setmode
+# else
+#  define set_binary_mode _setmode
+#  undef fileno
+#  define fileno _fileno
+# endif
+#else
+  /* On reasonable systems, binary I/O is the only choice.  */
+  /* Use a function rather than a macro, to avoid gcc warnings
+     "warning: statement with no effect".  */
+BINARY_IO_INLINE int
+set_binary_mode (int fd, int mode)
+{
+  (void) fd;
+  (void) mode;
+  return O_BINARY;
+}
+#endif
+
+/* SET_BINARY (fd);
+   changes the file descriptor fd to perform binary I/O.  */
+#ifdef __DJGPP__
+# include <unistd.h> /* declares isatty() */
+  /* Avoid putting stdin/stdout in binary mode if it is connected to
+     the console, because that would make it impossible for the user
+     to interrupt the program through Ctrl-C or Ctrl-Break.  */
+# define SET_BINARY(fd) ((void) (!isatty (fd) ? (set_binary_mode (fd, O_BINARY), 0) : 0))
+#else
+# define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY))
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _BINARY_H */
diff --git a/contrib/diffutils/lib/bitrotate.c b/contrib/diffutils/lib/bitrotate.c
new file mode 100644 (file)
index 0000000..a8f6028
--- /dev/null
@@ -0,0 +1,3 @@
+#include <config.h>
+#define BITROTATE_INLINE _GL_EXTERN_INLINE
+#include "bitrotate.h"
index c3a5e1a..9e10a45 100644 (file)
@@ -1,5 +1,5 @@
 /* bitrotate.h - Rotate bits in integers
-   Copyright (C) 2008-2011 Free Software Foundation, Inc.
+   Copyright (C) 2008-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #include <stdint.h>
 #include <sys/types.h>
 
+_GL_INLINE_HEADER_BEGIN
+#ifndef BITROTATE_INLINE
+# define BITROTATE_INLINE _GL_INLINE
+#endif
+
 #ifdef UINT64_MAX
 /* Given an unsigned 64-bit argument X, return the value corresponding
    to rotating the bits N steps to the left.  N must be between 1 and
    63 inclusive. */
-static inline uint64_t
+BITROTATE_INLINE uint64_t
 rotl64 (uint64_t x, int n)
 {
   return ((x << n) | (x >> (64 - n))) & UINT64_MAX;
@@ -36,7 +41,7 @@ rotl64 (uint64_t x, int n)
 /* Given an unsigned 64-bit argument X, return the value corresponding
    to rotating the bits N steps to the right.  N must be between 1 to
    63 inclusive.*/
-static inline uint64_t
+BITROTATE_INLINE uint64_t
 rotr64 (uint64_t x, int n)
 {
   return ((x >> n) | (x << (64 - n))) & UINT64_MAX;
@@ -46,7 +51,7 @@ rotr64 (uint64_t x, int n)
 /* Given an unsigned 32-bit argument X, return the value corresponding
    to rotating the bits N steps to the left.  N must be between 1 and
    31 inclusive. */
-static inline uint32_t
+BITROTATE_INLINE uint32_t
 rotl32 (uint32_t x, int n)
 {
   return ((x << n) | (x >> (32 - n))) & UINT32_MAX;
@@ -55,7 +60,7 @@ rotl32 (uint32_t x, int n)
 /* Given an unsigned 32-bit argument X, return the value corresponding
    to rotating the bits N steps to the right.  N must be between 1 to
    31 inclusive.*/
-static inline uint32_t
+BITROTATE_INLINE uint32_t
 rotr32 (uint32_t x, int n)
 {
   return ((x >> n) | (x << (32 - n))) & UINT32_MAX;
@@ -64,7 +69,7 @@ rotr32 (uint32_t x, int n)
 /* Given a size_t argument X, return the value corresponding
    to rotating the bits N steps to the left.  N must be between 1 and
    (CHAR_BIT * sizeof (size_t) - 1) inclusive.  */
-static inline size_t
+BITROTATE_INLINE size_t
 rotl_sz (size_t x, int n)
 {
   return ((x << n) | (x >> ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX;
@@ -73,7 +78,7 @@ rotl_sz (size_t x, int n)
 /* Given a size_t argument X, return the value corresponding
    to rotating the bits N steps to the right.  N must be between 1 to
    (CHAR_BIT * sizeof (size_t) - 1) inclusive.  */
-static inline size_t
+BITROTATE_INLINE size_t
 rotr_sz (size_t x, int n)
 {
   return ((x >> n) | (x << ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX;
@@ -84,7 +89,7 @@ rotr_sz (size_t x, int n)
    15 inclusive, but on most relevant targets N can also be 0 and 16
    because 'int' is at least 32 bits and the arguments must widen
    before shifting. */
-static inline uint16_t
+BITROTATE_INLINE uint16_t
 rotl16 (uint16_t x, int n)
 {
   return ((x << n) | (x >> (16 - n))) & UINT16_MAX;
@@ -95,7 +100,7 @@ rotl16 (uint16_t x, int n)
    inclusive, but on most relevant targets N can also be 0 and 16
    because 'int' is at least 32 bits and the arguments must widen
    before shifting. */
-static inline uint16_t
+BITROTATE_INLINE uint16_t
 rotr16 (uint16_t x, int n)
 {
   return ((x >> n) | (x << (16 - n))) & UINT16_MAX;
@@ -106,7 +111,7 @@ rotr16 (uint16_t x, int n)
    inclusive, but on most relevant targets N can also be 0 and 8
    because 'int' is at least 32 bits and the arguments must widen
    before shifting. */
-static inline uint8_t
+BITROTATE_INLINE uint8_t
 rotl8 (uint8_t x, int n)
 {
   return ((x << n) | (x >> (8 - n))) & UINT8_MAX;
@@ -117,10 +122,12 @@ rotl8 (uint8_t x, int n)
    inclusive, but on most relevant targets N can also be 0 and 8
    because 'int' is at least 32 bits and the arguments must widen
    before shifting. */
-static inline uint8_t
+BITROTATE_INLINE uint8_t
 rotr8 (uint8_t x, int n)
 {
   return ((x >> n) | (x << (8 - n))) & UINT8_MAX;
 }
 
+_GL_INLINE_HEADER_END
+
 #endif /* _GL_BITROTATE_H */
index 835f4e1..752d2e3 100644 (file)
@@ -1,8 +1,6 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 /* Character handling in C locale.
 
-   Copyright 2000-2003, 2006, 2009-2011 Free Software Foundation, Inc.
+   Copyright 2000-2003, 2006, 2009-2013 Free Software Foundation, Inc.
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -15,8 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software Foundation,
-Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
index a58913e..3a66440 100644 (file)
@@ -1,5 +1,3 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 /* Character handling in C locale.
 
    These functions work like the corresponding functions in <ctype.h>,
@@ -7,7 +5,7 @@
    <ctype.h> functions' behaviour depends on the current locale set via
    setlocale.
 
-   Copyright (C) 2000-2003, 2006, 2008-2011 Free Software Foundation, Inc.
+   Copyright (C) 2000-2003, 2006, 2008-2013 Free Software Foundation, Inc.
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -20,8 +18,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software Foundation,
-Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef C_CTYPE_H
 #define C_CTYPE_H
@@ -120,23 +117,23 @@ extern "C" {
          if (c_isalpha (*s)) ...
  */
 
-extern bool c_isascii (int c); /* not locale dependent */
-
-extern bool c_isalnum (int c);
-extern bool c_isalpha (int c);
-extern bool c_isblank (int c);
-extern bool c_iscntrl (int c);
-extern bool c_isdigit (int c);
-extern bool c_islower (int c);
-extern bool c_isgraph (int c);
-extern bool c_isprint (int c);
-extern bool c_ispunct (int c);
-extern bool c_isspace (int c);
-extern bool c_isupper (int c);
-extern bool c_isxdigit (int c);
-
-extern int c_tolower (int c);
-extern int c_toupper (int c);
+extern bool c_isascii (int c) _GL_ATTRIBUTE_CONST; /* not locale dependent */
+
+extern bool c_isalnum (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isalpha (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isblank (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_iscntrl (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isdigit (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_islower (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isgraph (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isprint (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_ispunct (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isspace (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isupper (int c) _GL_ATTRIBUTE_CONST;
+extern bool c_isxdigit (int c) _GL_ATTRIBUTE_CONST;
+
+extern int c_tolower (int c) _GL_ATTRIBUTE_CONST;
+extern int c_toupper (int c) _GL_ATTRIBUTE_CONST;
 
 
 #if defined __GNUC__ && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS
index 2f902af..03db242 100644 (file)
@@ -1,6 +1,6 @@
 /* Stack overflow handling.
 
-   Copyright (C) 2002, 2004, 2006, 2008-2011 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2006, 2008-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -237,7 +237,7 @@ segv_handler (int signo, siginfo_t *info,
 
      Note that although both Linux and Solaris provide
      sigaltstack, SA_ONSTACK, and SA_SIGINFO, currently only
-     Solaris satisfies the XSI heueristic.  This is because
+     Solaris satisfies the XSI heuristic.  This is because
      Solaris populates uc_stack with the details of the
      interrupted stack, while Linux populates it with the details
      of the current stack.  */
index 5aadfb5..2e61bdf 100644 (file)
@@ -1,6 +1,6 @@
 /* Stack overflow handling.
 
-   Copyright (C) 2002, 2004, 2008-2011 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004, 2008-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index 09e9e9c..49e1bb0 100644 (file)
@@ -1,7 +1,5 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 /* Case-insensitive string comparison functions in C locale.
-   Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2011 Free Software
+   Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2013 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -15,8 +13,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef C_STRCASE_H
 #define C_STRCASE_H
@@ -42,12 +39,13 @@ extern "C" {
 /* Compare strings S1 and S2, ignoring case, returning less than, equal to or
    greater than zero if S1 is lexicographically less than, equal to or greater
    than S2.  */
-extern int c_strcasecmp (const char *s1, const char *s2);
+extern int c_strcasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE;
 
 /* Compare no more than N characters of strings S1 and S2, ignoring case,
    returning less than, equal to or greater than zero if S1 is
    lexicographically less than, equal to or greater than S2.  */
-extern int c_strncasecmp (const char *s1, const char *s2, size_t n);
+extern int c_strncasecmp (const char *s1, const char *s2, size_t n)
+  _GL_ATTRIBUTE_PURE;
 
 
 #ifdef __cplusplus
index 928c5e6..ef85f0e 100644 (file)
@@ -1,7 +1,5 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 /* c-strcasecmp.c -- case insensitive string comparator in C locale
-   Copyright (C) 1998-1999, 2005-2006, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2006, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -14,8 +12,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/contrib/diffutils/lib/c-strcaseeq.h b/contrib/diffutils/lib/c-strcaseeq.h
new file mode 100644 (file)
index 0000000..afdea26
--- /dev/null
@@ -0,0 +1,184 @@
+/* Optimized case-insensitive string comparison in C locale.
+   Copyright (C) 2001-2002, 2007, 2009-2013 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 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
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>.  */
+
+#include "c-strcase.h"
+#include "c-ctype.h"
+
+/* STRCASEEQ allows to optimize string comparison with a small literal string.
+     STRCASEEQ (s, "UTF-8", 'U','T','F','-','8',0,0,0,0)
+   is semantically equivalent to
+     c_strcasecmp (s, "UTF-8") == 0
+   just faster.  */
+
+/* Help GCC to generate good code for string comparisons with
+   immediate strings. */
+#if defined (__GNUC__) && defined (__OPTIMIZE__)
+
+/* Case insensitive comparison of ASCII characters.  */
+# if C_CTYPE_ASCII
+#  define CASEEQ(other,upper) \
+     (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper))
+# elif C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#  define CASEEQ(other,upper) \
+     (c_isupper (upper) ? (other) == (upper) || (other) == (upper) - 'A' + 'a' : (other) == (upper))
+# else
+#  define CASEEQ(other,upper) \
+     (c_toupper (other) == (upper))
+# endif
+
+static inline int
+strcaseeq9 (const char *s1, const char *s2)
+{
+  return c_strcasecmp (s1 + 9, s2 + 9) == 0;
+}
+
+static inline int
+strcaseeq8 (const char *s1, const char *s2, char s28)
+{
+  if (CASEEQ (s1[8], s28))
+    {
+      if (s28 == 0)
+        return 1;
+      else
+        return strcaseeq9 (s1, s2);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq7 (const char *s1, const char *s2, char s27, char s28)
+{
+  if (CASEEQ (s1[7], s27))
+    {
+      if (s27 == 0)
+        return 1;
+      else
+        return strcaseeq8 (s1, s2, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq6 (const char *s1, const char *s2, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[6], s26))
+    {
+      if (s26 == 0)
+        return 1;
+      else
+        return strcaseeq7 (s1, s2, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[5], s25))
+    {
+      if (s25 == 0)
+        return 1;
+      else
+        return strcaseeq6 (s1, s2, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[4], s24))
+    {
+      if (s24 == 0)
+        return 1;
+      else
+        return strcaseeq5 (s1, s2, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[3], s23))
+    {
+      if (s23 == 0)
+        return 1;
+      else
+        return strcaseeq4 (s1, s2, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[2], s22))
+    {
+      if (s22 == 0)
+        return 1;
+      else
+        return strcaseeq3 (s1, s2, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[1], s21))
+    {
+      if (s21 == 0)
+        return 1;
+      else
+        return strcaseeq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+strcaseeq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (CASEEQ (s1[0], s20))
+    {
+      if (s20 == 0)
+        return 1;
+      else
+        return strcaseeq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+#define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  strcaseeq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
+
+#else
+
+#define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  (c_strcasecmp (s1, s2) == 0)
+
+#endif
index 810bf56..04404b0 100644 (file)
@@ -1,7 +1,5 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 /* c-strncasecmp.c -- case insensitive string comparator in C locale
-   Copyright (C) 1998-1999, 2005-2006, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2006, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -14,8 +12,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 
diff --git a/contrib/diffutils/lib/careadlinkat.c b/contrib/diffutils/lib/careadlinkat.c
new file mode 100644 (file)
index 0000000..e2c19d1
--- /dev/null
@@ -0,0 +1,160 @@
+/* Read symbolic links into a buffer without size limitation, relative to fd.
+
+   Copyright (C) 2001, 2003-2004, 2007, 2009-2013 Free Software Foundation,
+   Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert, Bruno Haible, and Jim Meyering.  */
+
+#include <config.h>
+
+#include "careadlinkat.h"
+
+#include <errno.h>
+#include <limits.h>
+#include <string.h>
+#include <unistd.h>
+
+/* Define this independently so that stdint.h is not a prerequisite.  */
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
+#ifndef SSIZE_MAX
+# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2))
+#endif
+
+#include "allocator.h"
+
+/* Assuming the current directory is FD, get the symbolic link value
+   of FILENAME as a null-terminated string and put it into a buffer.
+   If FD is AT_FDCWD, FILENAME is interpreted relative to the current
+   working directory, as in openat.
+
+   If the link is small enough to fit into BUFFER put it there.
+   BUFFER's size is BUFFER_SIZE, and BUFFER can be null
+   if BUFFER_SIZE is zero.
+
+   If the link is not small, put it into a dynamically allocated
+   buffer managed by ALLOC.  It is the caller's responsibility to free
+   the returned value if it is nonnull and is not BUFFER.  A null
+   ALLOC stands for the standard allocator.
+
+   The PREADLINKAT function specifies how to read links.  It operates
+   like POSIX readlinkat()
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>
+   but can assume that its first argument is the same as FD.
+
+   If successful, return the buffer address; otherwise return NULL and
+   set errno.  */
+
+char *
+careadlinkat (int fd, char const *filename,
+              char *buffer, size_t buffer_size,
+              struct allocator const *alloc,
+              ssize_t (*preadlinkat) (int, char const *, char *, size_t))
+{
+  char *buf;
+  size_t buf_size;
+  size_t buf_size_max =
+    SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX;
+  char stack_buf[1024];
+
+  if (! alloc)
+    alloc = &stdlib_allocator;
+
+  if (! buffer_size)
+    {
+      /* Allocate the initial buffer on the stack.  This way, in the
+         common case of a symlink of small size, we get away with a
+         single small malloc() instead of a big malloc() followed by a
+         shrinking realloc().  */
+      buffer = stack_buf;
+      buffer_size = sizeof stack_buf;
+    }
+
+  buf = buffer;
+  buf_size = buffer_size;
+
+  do
+    {
+      /* Attempt to read the link into the current buffer.  */
+      ssize_t link_length = preadlinkat (fd, filename, buf, buf_size);
+      size_t link_size;
+      if (link_length < 0)
+        {
+          /* On AIX 5L v5.3 and HP-UX 11i v2 04/09, readlink returns -1
+             with errno == ERANGE if the buffer is too small.  */
+          int readlinkat_errno = errno;
+          if (readlinkat_errno != ERANGE)
+            {
+              if (buf != buffer)
+                {
+                  alloc->free (buf);
+                  errno = readlinkat_errno;
+                }
+              return NULL;
+            }
+        }
+
+      link_size = link_length;
+
+      if (link_size < buf_size)
+        {
+          buf[link_size++] = '\0';
+
+          if (buf == stack_buf)
+            {
+              char *b = (char *) alloc->allocate (link_size);
+              buf_size = link_size;
+              if (! b)
+                break;
+              memcpy (b, buf, link_size);
+              buf = b;
+            }
+          else if (link_size < buf_size && buf != buffer && alloc->reallocate)
+            {
+              /* Shrink BUF before returning it.  */
+              char *b = (char *) alloc->reallocate (buf, link_size);
+              if (b)
+                buf = b;
+            }
+
+          return buf;
+        }
+
+      if (buf != buffer)
+        alloc->free (buf);
+
+      if (buf_size <= buf_size_max / 2)
+        buf_size *= 2;
+      else if (buf_size < buf_size_max)
+        buf_size = buf_size_max;
+      else if (buf_size_max < SIZE_MAX)
+        {
+          errno = ENAMETOOLONG;
+          return NULL;
+        }
+      else
+        break;
+      buf = (char *) alloc->allocate (buf_size);
+    }
+  while (buf);
+
+  if (alloc->die)
+    alloc->die (buf_size);
+  errno = ENOMEM;
+  return NULL;
+}
diff --git a/contrib/diffutils/lib/careadlinkat.h b/contrib/diffutils/lib/careadlinkat.h
new file mode 100644 (file)
index 0000000..46f88ae
--- /dev/null
@@ -0,0 +1,67 @@
+/* Read symbolic links into a buffer without size limitation, relative to fd.
+
+   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert, Bruno Haible, and Jim Meyering.  */
+
+#ifndef _GL_CAREADLINKAT_H
+#define _GL_CAREADLINKAT_H
+
+#include <fcntl.h>
+#include <unistd.h>
+
+struct allocator;
+
+/* Assuming the current directory is FD, get the symbolic link value
+   of FILENAME as a null-terminated string and put it into a buffer.
+   If FD is AT_FDCWD, FILENAME is interpreted relative to the current
+   working directory, as in openat.
+
+   If the link is small enough to fit into BUFFER put it there.
+   BUFFER's size is BUFFER_SIZE, and BUFFER can be null
+   if BUFFER_SIZE is zero.
+
+   If the link is not small, put it into a dynamically allocated
+   buffer managed by ALLOC.  It is the caller's responsibility to free
+   the returned value if it is nonnull and is not BUFFER.
+
+   The PREADLINKAT function specifies how to read links.  It operates
+   like POSIX readlinkat()
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>
+   but can assume that its first argument is the same as FD.
+
+   If successful, return the buffer address; otherwise return NULL and
+   set errno.  */
+
+char *careadlinkat (int fd, char const *filename,
+                    char *buffer, size_t buffer_size,
+                    struct allocator const *alloc,
+                    ssize_t (*preadlinkat) (int, char const *,
+                                            char *, size_t));
+
+/* Suitable value for careadlinkat's FD argument.  */
+#if HAVE_READLINKAT
+/* AT_FDCWD is declared in <fcntl.h>.  */
+#else
+/* Define AT_FDCWD independently, so that the careadlinkat module does
+   not depend on the fcntl-h module.  We might as well use the same value
+   as fcntl-h.  */
+# ifndef AT_FDCWD
+#  define AT_FDCWD (-3041965)
+# endif
+#endif
+
+#endif /* _GL_CAREADLINKAT_H */
diff --git a/contrib/diffutils/lib/close.c b/contrib/diffutils/lib/close.c
new file mode 100644 (file)
index 0000000..f620e54
--- /dev/null
@@ -0,0 +1,69 @@
+/* close replacement.
+   Copyright (C) 2008-2013 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <unistd.h>
+
+#include <errno.h>
+
+#include "fd-hook.h"
+#include "msvc-inval.h"
+
+#undef close
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static int
+close_nothrow (int fd)
+{
+  int result;
+
+  TRY_MSVC_INVAL
+    {
+      result = close (fd);
+    }
+  CATCH_MSVC_INVAL
+    {
+      result = -1;
+      errno = EBADF;
+    }
+  DONE_MSVC_INVAL;
+
+  return result;
+}
+#else
+# define close_nothrow close
+#endif
+
+/* Override close() to call into other gnulib modules.  */
+
+int
+rpl_close (int fd)
+{
+#if WINDOWS_SOCKETS
+  int retval = execute_all_close_hooks (close_nothrow, fd);
+#else
+  int retval = close_nothrow (fd);
+#endif
+
+#if REPLACE_FCHDIR
+  if (retval >= 0)
+    _gl_unregister_fd (fd);
+#endif
+
+  return retval;
+}
index 91e1999..a47cb70 100644 (file)
@@ -1,6 +1,6 @@
 /* Buffer primitives for comparison operations.
 
-   Copyright (C) 1993, 1995, 1998, 2001-2002, 2006, 2009-2011 Free Software
+   Copyright (C) 1993, 1995, 1998, 2001-2002, 2006, 2009-2013 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
index 2296766..732d7ab 100644 (file)
@@ -1,6 +1,6 @@
 /* Buffer primitives for comparison operations.
 
-   Copyright (C) 2002, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -16,4 +16,4 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 size_t block_read (int, char *, size_t);
-size_t buffer_lcm (size_t, size_t, size_t);
+size_t buffer_lcm (size_t, size_t, size_t) _GL_ATTRIBUTE_CONST;
index 1cdc985..5faaf9a 100644 (file)
@@ -1,6 +1,6 @@
 /* Analyze differences between two vectors.
 
-   Copyright (C) 1988-1989, 1992-1995, 2001-2004, 2006-2011 Free Software
+   Copyright (C) 1988-1989, 1992-1995, 2001-2004, 2006-2013 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -76,7 +76,7 @@
 # define EARLY_ABORT(ctxt) false
 #endif
 
-/* Use this to suppress gcc's `...may be used before initialized' warnings.
+/* Use this to suppress gcc's "...may be used before initialized" warnings.
    Beware: The Code argument must not contain commas.  */
 #ifndef IF_LINT
 # ifdef lint
@@ -129,7 +129,7 @@ struct context
   /* Edit scripts longer than this are too expensive to compute.  */
   OFFSET too_expensive;
 
-  /* Snakes bigger than this are considered `big'.  */
+  /* Snakes bigger than this are considered "big".  */
   #define SNAKE_LIMIT 20
 };
 
index f5b0c0f..82f6630 100644 (file)
@@ -1,6 +1,6 @@
 /* dirname.c -- return all but the last element in a file name
 
-   Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2011 Free Software
+   Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2013 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -25,7 +25,7 @@
 
 /* Return the length of the prefix of FILE that will be used by
    dir_name.  If FILE is in the working directory, this returns zero
-   even though `dir_name (FILE)' will return ".".  Works properly even
+   even though 'dir_name (FILE)' will return ".".  Works properly even
    if there are trailing slashes (by effectively ignoring them).  */
 
 size_t
@@ -53,9 +53,9 @@ dir_len (char const *file)
 }
 
 
-/* In general, we can't use the builtin `dirname' function if available,
+/* In general, we can't use the builtin 'dirname' function if available,
    since it has different meanings in different environments.
-   In some environments the builtin `dirname' modifies its argument.
+   In some environments the builtin 'dirname' modifies its argument.
 
    Return the leading directories part of FILE, allocated with malloc.
    Works properly even if there are trailing slashes (by effectively
index 411ded3..1fb6588 100644 (file)
@@ -1,6 +1,6 @@
 /* dirname.c -- return all but the last element in a file name
 
-   Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2011 Free Software
+   Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2013 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
index 2ef9882..4ad0312 100644 (file)
@@ -1,6 +1,6 @@
 /*  Take file names apart into directory and base names.
 
-    Copyright (C) 1998, 2001, 2003-2006, 2009-2011 Free Software Foundation,
+    Copyright (C) 1998, 2001, 2003-2006, 2009-2013 Free Software Foundation,
     Inc.
 
     This program is free software: you can redistribute it and/or modify
@@ -37,9 +37,9 @@ char *dir_name (char const *file);
 # endif
 
 char *mdir_name (char const *file);
-size_t base_len (char const *file);
-size_t dir_len (char const *file);
-char *last_component (char const *file);
+size_t base_len (char const *file) _GL_ATTRIBUTE_PURE;
+size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE;
+char *last_component (char const *file) _GL_ATTRIBUTE_PURE;
 
 bool strip_trailing_slashes (char *file);
 
index acdd03b..ba63ce4 100644 (file)
@@ -1,6 +1,6 @@
 /* File names on MS-DOS/Windows systems.
 
-   Copyright (C) 2000-2001, 2004-2006, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2000-2001, 2004-2006, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index e00dc7b..9219eb3 100644 (file)
@@ -1,6 +1,6 @@
 /* Duplicate an open file descriptor to a specified file descriptor.
 
-   Copyright (C) 1999, 2004-2007, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2004-2007, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #include <errno.h>
 #include <fcntl.h>
 
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-/* Get declarations of the Win32 API functions.  */
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-#endif
-
 #if HAVE_DUP2
 
 # undef dup2
 
-int
-rpl_dup2 (int fd, int desired_fd)
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+/* Get declarations of the native Windows API functions.  */
+#  define WIN32_LEAN_AND_MEAN
+#  include <windows.h>
+
+#  include "msvc-inval.h"
+
+/* Get _get_osfhandle.  */
+#  include "msvc-nothrow.h"
+
+static int
+ms_windows_dup2 (int fd, int desired_fd)
 {
   int result;
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
   /* If fd is closed, mingw hangs on dup2 (fd, fd).  If fd is open,
      dup2 (fd, fd) returns 0, but all further attempts to use fd in
      future dup2 calls will hang.  */
@@ -52,6 +57,7 @@ rpl_dup2 (int fd, int desired_fd)
         }
       return fd;
     }
+
   /* Wine 1.0.1 return 0 when desired_fd is negative but not -1:
      http://bugs.winehq.org/show_bug.cgi?id=21289 */
   if (desired_fd < 0)
@@ -59,26 +65,48 @@ rpl_dup2 (int fd, int desired_fd)
       errno = EBADF;
       return -1;
     }
-# elif !defined __linux__
-  /* On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC.  */
-  if (fd == desired_fd)
-    return fcntl (fd, F_GETFL) == -1 ? -1 : fd;
-# endif
-  result = dup2 (fd, desired_fd);
-# ifdef __linux__
-  /* Correct a Linux return value.
-     <http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.30.y.git;a=commitdiff;h=2b79bc4f7ebbd5af3c8b867968f9f15602d5f802>
-   */
-  if (fd == desired_fd && result == (unsigned int) -EBADF)
+
+  TRY_MSVC_INVAL
+    {
+      result = dup2 (fd, desired_fd);
+    }
+  CATCH_MSVC_INVAL
     {
       errno = EBADF;
       result = -1;
     }
-# endif
+  DONE_MSVC_INVAL;
+
   if (result == 0)
     result = desired_fd;
-  /* Correct a cygwin 1.5.x errno value.  */
-  else if (result == -1 && errno == EMFILE)
+
+  return result;
+}
+
+#  define dup2 ms_windows_dup2
+
+# endif
+
+int
+rpl_dup2 (int fd, int desired_fd)
+{
+  int result;
+
+# ifdef F_GETFL
+  /* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF.
+     On Cygwin 1.5.x, dup2 (1, 1) returns 0.
+     On Cygwin 1.7.17, dup2 (1, -1) dumps core.
+     On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC.  */
+  if (desired_fd < 0)
+    fd = desired_fd;
+  if (fd == desired_fd)
+    return fcntl (fd, F_GETFL) == -1 ? -1 : fd;
+# endif
+
+  result = dup2 (fd, desired_fd);
+
+  /* Correct an errno value on FreeBSD 6.1 and Cygwin 1.5.x.  */
+  if (result == -1 && errno == EMFILE)
     errno = EBADF;
 # if REPLACE_FCHDIR
   if (fd != desired_fd && result != -1)
index 7482baa..865b293 100644 (file)
@@ -1,5 +1,5 @@
 /* Error handler for noninteractive utilities
-   Copyright (C) 1990-1998, 2000-2007, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 1990-1998, 2000-2007, 2009-2013 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software: you can redistribute it and/or modify
@@ -54,7 +54,7 @@
    function without parameters instead.  */
 void (*error_print_progname) (void);
 
-/* This variable is incremented each time `error' is called.  */
+/* This variable is incremented each time 'error' is called.  */
 unsigned int error_message_count;
 
 #ifdef _LIBC
@@ -65,7 +65,7 @@ unsigned int error_message_count;
 # include <limits.h>
 # include <libio/libioP.h>
 
-/* In GNU libc we want do not want to use the common name `error' directly.
+/* In GNU libc we want do not want to use the common name 'error' directly.
    Instead make it a weak alias.  */
 extern void __error (int status, int errnum, const char *message, ...)
      __attribute__ ((__format__ (__printf__, 3, 4)));
@@ -89,9 +89,11 @@ extern void __error_at_line (int status, int errnum, const char *file_name,
 # include <unistd.h>
 
 # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-/* Get declarations of the Win32 API functions.  */
+/* Get declarations of the native Windows API functions.  */
 #  define WIN32_LEAN_AND_MEAN
 #  include <windows.h>
+/* Get _get_osfhandle.  */
+#  include "msvc-nothrow.h"
 # endif
 
 /* The gnulib override of fcntl is not needed in this file.  */
@@ -119,13 +121,14 @@ extern char *program_name;
 
 #if !_LIBC
 /* Return non-zero if FD is open.  */
-static inline int
+static int
 is_open (int fd)
 {
 # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-  /* On Win32: The initial state of unassigned standard file descriptors is
-     that they are open but point to an INVALID_HANDLE_VALUE.  There is no
-     fcntl, and the gnulib replacement fcntl does not support F_GETFL.  */
+  /* On native Windows: The initial state of unassigned standard file
+     descriptors is that they are open but point to an INVALID_HANDLE_VALUE.
+     There is no fcntl, and the gnulib replacement fcntl does not support
+     F_GETFL.  */
   return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE;
 # else
 #  ifndef F_GETFL
@@ -136,7 +139,7 @@ is_open (int fd)
 }
 #endif
 
-static inline void
+static void
 flush_stdout (void)
 {
 #if !_LIBC
index 80f81bc..afcb0e1 100644 (file)
@@ -1,5 +1,5 @@
 /* Declaration for error-reporting function
-   Copyright (C) 1995-1997, 2003, 2006, 2008-2011 Free Software Foundation,
+   Copyright (C) 1995-1997, 2003, 2006, 2008-2013 Free Software Foundation,
    Inc.
    This file is part of the GNU C Library.
 
@@ -35,9 +35,9 @@
 extern "C" {
 #endif
 
-/* Print a message with `fprintf (stderr, FORMAT, ...)';
+/* Print a message with 'fprintf (stderr, FORMAT, ...)';
    if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
-   If STATUS is nonzero, terminate the program with `exit (STATUS)'.  */
+   If STATUS is nonzero, terminate the program with 'exit (STATUS)'.  */
 
 extern void error (int __status, int __errnum, const char *__format, ...)
      _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4));
@@ -51,7 +51,7 @@ extern void error_at_line (int __status, int __errnum, const char *__fname,
    function without parameters instead.  */
 extern void (*error_print_progname) (void);
 
-/* This variable is incremented each time `error' is called.  */
+/* This variable is incremented each time 'error' is called.  */
 extern unsigned int error_message_count;
 
 /* Sometimes we want to have at most one error per line.  This
index df49714..a7dd9b3 100644 (file)
@@ -1,6 +1,6 @@
 /* exclude.c -- exclude file names
 
-   Copyright (C) 1992-1994, 1997, 1999-2007, 2009-2011 Free Software
+   Copyright (C) 1992-1994, 1997, 1999-2007, 2009-2013 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -104,53 +104,46 @@ struct exclude_segment
     } v;
   };
 
-/* The exclude structure keeps a singly-linked list of exclude segments */
+/* The exclude structure keeps a singly-linked list of exclude segments,
+   maintained in reverse order.  */
 struct exclude
   {
-    struct exclude_segment *head, *tail;
+    struct exclude_segment *head;
   };
 
-/* Return true if str has wildcard characters */
+/* Return true if STR has or may have wildcards, when matched with OPTIONS.
+   Return false if STR definitely does not have wildcards.  */
 bool
 fnmatch_pattern_has_wildcards (const char *str, int options)
 {
-  const char *cset = "\\?*[]";
-  if (options & FNM_NOESCAPE)
-    cset++;
-  while (*str)
+  while (1)
     {
-      size_t n = strcspn (str, cset);
-      if (str[n] == 0)
-        break;
-      else if (str[n] == '\\')
+      switch (*str++)
         {
-          str += n + 1;
-          if (*str)
-            str++;
+        case '\\':
+          str += ! (options & FNM_NOESCAPE) && *str;
+          break;
+
+        case '+': case '@': case '!':
+          if (options & FNM_EXTMATCH && *str == '(')
+            return true;
+          break;
+
+        case '?': case '*': case '[':
+          return true;
+
+        case '\0':
+          return false;
         }
-      else
-        return true;
     }
-  return false;
 }
 
 static void
 unescape_pattern (char *str)
 {
-  int inset = 0;
-  char *q = str;
+  char const *q = str;
   do
-    {
-      if (inset)
-        {
-          if (*q == ']')
-            inset = 0;
-        }
-      else if (*q == '[')
-        inset = 1;
-      else if (*q == '\\')
-        q++;
-    }
+    q += *q == '\\' && q[1];
   while ((*str++ = *q++));
 }
 
@@ -219,8 +212,8 @@ string_free (void *data)
 }
 
 /* Create new exclude segment of given TYPE and OPTIONS, and attach it
-   to the tail of list in EX */
-static struct exclude_segment *
+   to the head of EX.  */
+static void
 new_exclude_segment (struct exclude *ex, enum exclude_type type, int options)
 {
   struct exclude_segment *sp = xzalloc (sizeof (struct exclude_segment));
@@ -242,12 +235,8 @@ new_exclude_segment (struct exclude *ex, enum exclude_type type, int options)
                                      string_free);
       break;
     }
-  if (ex->tail)
-    ex->tail->next = sp;
-  else
-    ex->head = sp;
-  ex->tail = sp;
-  return sp;
+  sp->next = ex->head;
+  ex->head = sp;
 }
 
 /* Free a single exclude segment */
@@ -347,36 +336,33 @@ exclude_fnmatch (char const *pattern, char const *f, int options)
   return matched;
 }
 
-/* Return true if the exclude_pattern segment SEG excludes F.  */
+/* Return true if the exclude_pattern segment SEG matches F.  */
 
 static bool
-excluded_file_pattern_p (struct exclude_segment const *seg, char const *f)
+file_pattern_matches (struct exclude_segment const *seg, char const *f)
 {
   size_t exclude_count = seg->v.pat.exclude_count;
   struct patopts const *exclude = seg->v.pat.exclude;
   size_t i;
-  bool excluded = !! (exclude[0].options & EXCLUDE_INCLUDE);
 
-  /* Scan through the options, until they change excluded */
   for (i = 0; i < exclude_count; i++)
     {
       char const *pattern = exclude[i].pattern;
       int options = exclude[i].options;
       if (exclude_fnmatch (pattern, f, options))
-        return !excluded;
+        return true;
     }
-  return excluded;
+  return false;
 }
 
-/* Return true if the exclude_hash segment SEG excludes F.
+/* Return true if the exclude_hash segment SEG matches F.
    BUFFER is an auxiliary storage of the same length as F (with nul
    terminator included) */
 static bool
-excluded_file_name_p (struct exclude_segment const *seg, char const *f,
-                      char *buffer)
+file_name_matches (struct exclude_segment const *seg, char const *f,
+                   char *buffer)
 {
   int options = seg->options;
-  bool excluded = !! (options & EXCLUDE_INCLUDE);
   Hash_table *table = seg->v.table;
 
   do
@@ -387,7 +373,7 @@ excluded_file_name_p (struct exclude_segment const *seg, char const *f,
       while (1)
         {
           if (hash_lookup (table, buffer))
-            return !excluded;
+            return true;
           if (options & FNM_LEADING_DIR)
             {
               char *p = strrchr (buffer, '/');
@@ -410,7 +396,8 @@ excluded_file_name_p (struct exclude_segment const *seg, char const *f,
         break;
     }
   while (f);
-  return excluded;
+
+  return false;
 }
 
 /* Return true if EX excludes F.  */
@@ -419,44 +406,46 @@ bool
 excluded_file_name (struct exclude const *ex, char const *f)
 {
   struct exclude_segment *seg;
-  bool excluded;
+  bool invert = false;
   char *filename = NULL;
 
   /* If no patterns are given, the default is to include.  */
   if (!ex->head)
     return false;
 
-  /* Otherwise, the default is the opposite of the first option.  */
-  excluded = !! (ex->head->options & EXCLUDE_INCLUDE);
-  /* Scan through the segments, seeing whether they change status from
-     excluded to included or vice versa.  */
-  for (seg = ex->head; seg; seg = seg->next)
+  /* Scan through the segments, reporting the status of the first match.
+     The segments are in reverse order, so this reports the status of
+     the last match in the original option list.  */
+  for (seg = ex->head; ; seg = seg->next)
     {
-      bool rc;
-
-      switch (seg->type)
+      if (seg->type == exclude_hash)
         {
-        case exclude_pattern:
-          rc = excluded_file_pattern_p (seg, f);
-          break;
-
-        case exclude_hash:
           if (!filename)
             filename = xmalloc (strlen (f) + 1);
-          rc = excluded_file_name_p (seg, f, filename);
-          break;
-
-        default:
-          abort ();
+          if (file_name_matches (seg, f, filename))
+            break;
         }
-      if (rc != excluded)
+      else
+        {
+          if (file_pattern_matches (seg, f))
+            break;
+        }
+
+      if (! seg->next)
         {
-          excluded = rc;
+          /* If patterns are given but none match, the default is the
+             opposite of the last segment (i.e., the first in the
+             original option list).  For example, in the command
+             'grep -r --exclude="a*" --include="*b" pat dir', the
+             first option is --exclude so any file name matching
+             neither a* nor *b is included.  */
+          invert = true;
           break;
         }
     }
+
   free (filename);
-  return excluded;
+  return invert ^ ! (seg->options & EXCLUDE_INCLUDE);
 }
 
 /* Append to EX the exclusion PATTERN with OPTIONS.  */
@@ -472,12 +461,11 @@ add_exclude (struct exclude *ex, char const *pattern, int options)
       struct exclude_pattern *pat;
       struct patopts *patopts;
 
-      if (ex->tail && ex->tail->type == exclude_pattern
-          && ((ex->tail->options & EXCLUDE_INCLUDE) ==
-              (options & EXCLUDE_INCLUDE)))
-        seg = ex->tail;
-      else
-        seg = new_exclude_segment (ex, exclude_pattern, options);
+      if (! (ex->head && ex->head->type == exclude_pattern
+             && ((ex->head->options & EXCLUDE_INCLUDE)
+                 == (options & EXCLUDE_INCLUDE))))
+        new_exclude_segment (ex, exclude_pattern, options);
+      seg = ex->head;
 
       pat = &seg->v.pat;
       if (pat->exclude_count == pat->exclude_alloc)
@@ -490,17 +478,16 @@ add_exclude (struct exclude *ex, char const *pattern, int options)
   else
     {
       char *str, *p;
-#define EXCLUDE_HASH_FLAGS (EXCLUDE_INCLUDE|EXCLUDE_ANCHORED|\
-                            FNM_LEADING_DIR|FNM_CASEFOLD)
-      if (ex->tail && ex->tail->type == exclude_hash
-          && ((ex->tail->options & EXCLUDE_HASH_FLAGS) ==
-              (options & EXCLUDE_HASH_FLAGS)))
-        seg = ex->tail;
-      else
-        seg = new_exclude_segment (ex, exclude_hash, options);
+      int exclude_hash_flags = (EXCLUDE_INCLUDE | EXCLUDE_ANCHORED
+                                | FNM_LEADING_DIR | FNM_CASEFOLD);
+      if (! (ex->head && ex->head->type == exclude_hash
+             && ((ex->head->options & exclude_hash_flags)
+                 == (options & exclude_hash_flags))))
+        new_exclude_segment (ex, exclude_hash, options);
+      seg = ex->head;
 
       str = xstrdup (pattern);
-      if (options & EXCLUDE_WILDCARDS)
+      if ((options & (EXCLUDE_WILDCARDS | FNM_NOESCAPE)) == EXCLUDE_WILDCARDS)
         unescape_pattern (str);
       p = hash_insert (seg->v.table, str);
       if (p != str)
index 0a314a9..f76b153 100644 (file)
@@ -1,6 +1,6 @@
 /* exclude.h -- declarations for excluding file names
 
-   Copyright (C) 1992-1994, 1997, 1999, 2001-2003, 2005-2006, 2009-2011 Free
+   Copyright (C) 1992-1994, 1997, 1999, 2001-2003, 2005-2006, 2009-2013 Free
    Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -39,7 +39,7 @@
 
 struct exclude;
 
-bool fnmatch_pattern_has_wildcards (const char *, int);
+bool fnmatch_pattern_has_wildcards (const char *, int) _GL_ATTRIBUTE_PURE;
 
 struct exclude *new_exclude (void);
 void free_exclude (struct exclude *);
index 953aa02..b0b4ebe 100644 (file)
@@ -1,6 +1,6 @@
 /* Failure exit status
 
-   Copyright (C) 2002-2003, 2005-2007, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2007, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index 6d01d4f..e54333b 100644 (file)
@@ -1,6 +1,6 @@
 /* Failure exit status
 
-   Copyright (C) 2002, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index d6a328c..735fa66 100644 (file)
@@ -1,6 +1,6 @@
 /* Provide file descriptor control.
 
-   Copyright (C) 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #undef fcntl
 
 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-/* Get declarations of the Win32 API functions.  */
+/* Get declarations of the native Windows API functions.  */
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
 
+/* Get _get_osfhandle.  */
+# include "msvc-nothrow.h"
+
 /* Upper bound on getdtablesize().  See lib/getdtablesize.c.  */
 # define OPEN_MAX_MAX 0x10000
 
@@ -91,7 +94,7 @@ dupfd (int oldfd, int newfd, int flags)
           result = -1;
           break;
         }
-      duplicated_fd = _open_osfhandle ((long) new_handle, flags);
+      duplicated_fd = _open_osfhandle ((intptr_t) new_handle, flags);
       if (duplicated_fd < 0)
         {
           CloseHandle (new_handle);
diff --git a/contrib/diffutils/lib/fd-hook.c b/contrib/diffutils/lib/fd-hook.c
new file mode 100644 (file)
index 0000000..e158a52
--- /dev/null
@@ -0,0 +1,116 @@
+/* Hook for making making file descriptor functions close(), ioctl() extensible.
+   Copyright (C) 2009-2013 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2009.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 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
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "fd-hook.h"
+
+#include <stdlib.h>
+
+/* Currently, this entire code is only needed for the handling of sockets
+   on native Windows platforms.  */
+#if WINDOWS_SOCKETS
+
+/* The first and last link in the doubly linked list.
+   Initially the list is empty.  */
+static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL };
+
+int
+execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary,
+                     int fd)
+{
+  if (remaining_list == &anchor)
+    /* End of list reached.  */
+    return primary (fd);
+  else
+    return remaining_list->private_close_fn (remaining_list->private_next,
+                                             primary, fd);
+}
+
+int
+execute_all_close_hooks (gl_close_fn primary, int fd)
+{
+  return execute_close_hooks (anchor.private_next, primary, fd);
+}
+
+int
+execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary,
+                     int fd, int request, void *arg)
+{
+  if (remaining_list == &anchor)
+    /* End of list reached.  */
+    return primary (fd, request, arg);
+  else
+    return remaining_list->private_ioctl_fn (remaining_list->private_next,
+                                             primary, fd, request, arg);
+}
+
+int
+execute_all_ioctl_hooks (gl_ioctl_fn primary,
+                         int fd, int request, void *arg)
+{
+  return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg);
+}
+
+void
+register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link)
+{
+  if (close_hook == NULL)
+    close_hook = execute_close_hooks;
+  if (ioctl_hook == NULL)
+    ioctl_hook = execute_ioctl_hooks;
+
+  if (link->private_next == NULL && link->private_prev == NULL)
+    {
+      /* Add the link to the doubly linked list.  */
+      link->private_next = anchor.private_next;
+      link->private_prev = &anchor;
+      link->private_close_fn = close_hook;
+      link->private_ioctl_fn = ioctl_hook;
+      anchor.private_next->private_prev = link;
+      anchor.private_next = link;
+    }
+  else
+    {
+      /* The link is already in use.  */
+      if (link->private_close_fn != close_hook
+          || link->private_ioctl_fn != ioctl_hook)
+        abort ();
+    }
+}
+
+void
+unregister_fd_hook (struct fd_hook *link)
+{
+  struct fd_hook *next = link->private_next;
+  struct fd_hook *prev = link->private_prev;
+
+  if (next != NULL && prev != NULL)
+    {
+      /* The link is in use.  Remove it from the doubly linked list.  */
+      prev->private_next = next;
+      next->private_prev = prev;
+      /* Clear the link, to mark it unused.  */
+      link->private_next = NULL;
+      link->private_prev = NULL;
+      link->private_close_fn = NULL;
+      link->private_ioctl_fn = NULL;
+    }
+}
+
+#endif
diff --git a/contrib/diffutils/lib/fd-hook.h b/contrib/diffutils/lib/fd-hook.h
new file mode 100644 (file)
index 0000000..d15b577
--- /dev/null
@@ -0,0 +1,119 @@
+/* Hook for making making file descriptor functions close(), ioctl() extensible.
+   Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3 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
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+
+#ifndef FD_HOOK_H
+#define FD_HOOK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Currently, this entire code is only needed for the handling of sockets
+   on native Windows platforms.  */
+#if WINDOWS_SOCKETS
+
+
+/* Type of function that closes FD.  */
+typedef int (*gl_close_fn) (int fd);
+
+/* Type of function that applies a control request to FD.  */
+typedef int (*gl_ioctl_fn) (int fd, int request, void *arg);
+
+/* An element of the list of file descriptor hooks.
+   In CLOS (Common Lisp Object System) speak, it consists of an "around"
+   method for the close() function and an "around" method for the ioctl()
+   function.
+   The fields of this structure are considered private.  */
+struct fd_hook
+{
+  /* Doubly linked list.  */
+  struct fd_hook *private_next;
+  struct fd_hook *private_prev;
+  /* Function that treats the types of FD that it knows about and calls
+     execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback.  */
+  int (*private_close_fn) (const struct fd_hook *remaining_list,
+                           gl_close_fn primary,
+                           int fd);
+  /* Function that treats the types of FD that it knows about and calls
+     execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a
+     fallback.  */
+  int (*private_ioctl_fn) (const struct fd_hook *remaining_list,
+                           gl_ioctl_fn primary,
+                           int fd, int request, void *arg);
+};
+
+/* This type of function closes FD, applying special knowledge for the FD
+   types it knows about, and calls
+   execute_close_hooks (REMAINING_LIST, PRIMARY, FD)
+   for the other FD types.
+   In CLOS speak, REMAINING_LIST is the remaining list of "around" methods,
+   and PRIMARY is the "primary" method for close().  */
+typedef int (*close_hook_fn) (const struct fd_hook *remaining_list,
+                              gl_close_fn primary,
+                              int fd);
+
+/* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method.
+   Return 0 or -1, like close() would do.  */
+extern int execute_close_hooks (const struct fd_hook *remaining_list,
+                                gl_close_fn primary,
+                                int fd);
+
+/* Execute all close hooks, with PRIMARY as "primary" method.
+   Return 0 or -1, like close() would do.  */
+extern int execute_all_close_hooks (gl_close_fn primary, int fd);
+
+/* This type of function applies a control request to FD, applying special
+   knowledge for the FD types it knows about, and calls
+   execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG)
+   for the other FD types.
+   In CLOS speak, REMAINING_LIST is the remaining list of "around" methods,
+   and PRIMARY is the "primary" method for ioctl().  */
+typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list,
+                              gl_ioctl_fn primary,
+                              int fd, int request, void *arg);
+
+/* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method.
+   Return 0 or -1, like ioctl() would do.  */
+extern int execute_ioctl_hooks (const struct fd_hook *remaining_list,
+                                gl_ioctl_fn primary,
+                                int fd, int request, void *arg);
+
+/* Execute all ioctl hooks, with PRIMARY as "primary" method.
+   Return 0 or -1, like ioctl() would do.  */
+extern int execute_all_ioctl_hooks (gl_ioctl_fn primary,
+                                    int fd, int request, void *arg);
+
+/* Add a function pair to the list of file descriptor hooks.
+   CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change.
+   The LINK variable points to a piece of memory which is guaranteed to be
+   accessible until the corresponding call to unregister_fd_hook.  */
+extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook,
+                              struct fd_hook *link);
+
+/* Removes a hook from the list of file descriptor hooks.  */
+extern void unregister_fd_hook (struct fd_hook *link);
+
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* FD_HOOK_H */
index 109db44..0d54269 100644 (file)
@@ -1,6 +1,6 @@
 /* Return a string describing the type of a file.
 
-   Copyright (C) 1993-1994, 2001-2002, 2004-2006, 2009-2011 Free Software
+   Copyright (C) 1993-1994, 2001-2002, 2004-2006, 2009-2013 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
index 0d1b9a4..9c6ac26 100644 (file)
@@ -1,6 +1,6 @@
 /* Return a string describing the type of a file.
 
-   Copyright (C) 1993-1994, 2001-2002, 2004-2005, 2009-2011 Free Software
+   Copyright (C) 1993-1994, 2001-2002, 2004-2005, 2009-2013 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -24,6 +24,6 @@
 # include <sys/types.h>
 # include <sys/stat.h>
 
-char const *file_type (struct stat const *);
+char const *file_type (struct stat const *) _GL_ATTRIBUTE_PURE;
 
 #endif /* FILE_TYPE_H */
index 8cb2da4..60c4988 100644 (file)
@@ -1,6 +1,6 @@
 /* Concatenate two arbitrary file names.
 
-   Copyright (C) 1996-2007, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 1996-2007, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -34,7 +34,7 @@
 /* Return the longest suffix of F that is a relative file name.
    If it has no such suffix, return the empty string.  */
 
-static char const *
+static char const * _GL_ATTRIBUTE_PURE
 longest_relative_suffix (char const *f)
 {
   for (f += FILE_SYSTEM_PREFIX_LEN (f); ISSLASH (*f); f++)
index 86b4e07..8809b57 100644 (file)
@@ -1,6 +1,6 @@
 /* Concatenate two arbitrary file names.
 
-   Copyright (C) 1996-2007, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 1996-2007, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index 31b3375..1476e14 100644 (file)
@@ -1,6 +1,6 @@
 /* Concatenate two arbitrary file names.
 
-   Copyright (C) 1996-1997, 2003, 2005, 2007, 2009-2011 Free Software
+   Copyright (C) 1996-1997, 2003, 2005, 2007, 2009-2013 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/contrib/diffutils/lib/float+.h b/contrib/diffutils/lib/float+.h
new file mode 100644 (file)
index 0000000..32fb790
--- /dev/null
@@ -0,0 +1,147 @@
+/* Supplemental information about the floating-point formats.
+   Copyright (C) 2007, 2009-2013 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2007.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _FLOATPLUS_H
+#define _FLOATPLUS_H
+
+#include <float.h>
+#include <limits.h>
+
+/* Number of bits in the mantissa of a floating-point number, including the
+   "hidden bit".  */
+#if FLT_RADIX == 2
+# define FLT_MANT_BIT FLT_MANT_DIG
+# define DBL_MANT_BIT DBL_MANT_DIG
+# define LDBL_MANT_BIT LDBL_MANT_DIG
+#elif FLT_RADIX == 4
+# define FLT_MANT_BIT (FLT_MANT_DIG * 2)
+# define DBL_MANT_BIT (DBL_MANT_DIG * 2)
+# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2)
+#elif FLT_RADIX == 16
+# define FLT_MANT_BIT (FLT_MANT_DIG * 4)
+# define DBL_MANT_BIT (DBL_MANT_DIG * 4)
+# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4)
+#endif
+
+/* Bit mask that can be used to mask the exponent, as an unsigned number.  */
+#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7)
+#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7)
+#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7)
+
+/* Number of bits used for the exponent of a floating-point number, including
+   the exponent's sign.  */
+#define FLT_EXP_BIT \
+  (FLT_EXP_MASK < 0x100 ? 8 : \
+   FLT_EXP_MASK < 0x200 ? 9 : \
+   FLT_EXP_MASK < 0x400 ? 10 : \
+   FLT_EXP_MASK < 0x800 ? 11 : \
+   FLT_EXP_MASK < 0x1000 ? 12 : \
+   FLT_EXP_MASK < 0x2000 ? 13 : \
+   FLT_EXP_MASK < 0x4000 ? 14 : \
+   FLT_EXP_MASK < 0x8000 ? 15 : \
+   FLT_EXP_MASK < 0x10000 ? 16 : \
+   FLT_EXP_MASK < 0x20000 ? 17 : \
+   FLT_EXP_MASK < 0x40000 ? 18 : \
+   FLT_EXP_MASK < 0x80000 ? 19 : \
+   FLT_EXP_MASK < 0x100000 ? 20 : \
+   FLT_EXP_MASK < 0x200000 ? 21 : \
+   FLT_EXP_MASK < 0x400000 ? 22 : \
+   FLT_EXP_MASK < 0x800000 ? 23 : \
+   FLT_EXP_MASK < 0x1000000 ? 24 : \
+   FLT_EXP_MASK < 0x2000000 ? 25 : \
+   FLT_EXP_MASK < 0x4000000 ? 26 : \
+   FLT_EXP_MASK < 0x8000000 ? 27 : \
+   FLT_EXP_MASK < 0x10000000 ? 28 : \
+   FLT_EXP_MASK < 0x20000000 ? 29 : \
+   FLT_EXP_MASK < 0x40000000 ? 30 : \
+   FLT_EXP_MASK <= 0x7fffffff ? 31 : \
+   32)
+#define DBL_EXP_BIT \
+  (DBL_EXP_MASK < 0x100 ? 8 : \
+   DBL_EXP_MASK < 0x200 ? 9 : \
+   DBL_EXP_MASK < 0x400 ? 10 : \
+   DBL_EXP_MASK < 0x800 ? 11 : \
+   DBL_EXP_MASK < 0x1000 ? 12 : \
+   DBL_EXP_MASK < 0x2000 ? 13 : \
+   DBL_EXP_MASK < 0x4000 ? 14 : \
+   DBL_EXP_MASK < 0x8000 ? 15 : \
+   DBL_EXP_MASK < 0x10000 ? 16 : \
+   DBL_EXP_MASK < 0x20000 ? 17 : \
+   DBL_EXP_MASK < 0x40000 ? 18 : \
+   DBL_EXP_MASK < 0x80000 ? 19 : \
+   DBL_EXP_MASK < 0x100000 ? 20 : \
+   DBL_EXP_MASK < 0x200000 ? 21 : \
+   DBL_EXP_MASK < 0x400000 ? 22 : \
+   DBL_EXP_MASK < 0x800000 ? 23 : \
+   DBL_EXP_MASK < 0x1000000 ? 24 : \
+   DBL_EXP_MASK < 0x2000000 ? 25 : \
+   DBL_EXP_MASK < 0x4000000 ? 26 : \
+   DBL_EXP_MASK < 0x8000000 ? 27 : \
+   DBL_EXP_MASK < 0x10000000 ? 28 : \
+   DBL_EXP_MASK < 0x20000000 ? 29 : \
+   DBL_EXP_MASK < 0x40000000 ? 30 : \
+   DBL_EXP_MASK <= 0x7fffffff ? 31 : \
+   32)
+#define LDBL_EXP_BIT \
+  (LDBL_EXP_MASK < 0x100 ? 8 : \
+   LDBL_EXP_MASK < 0x200 ? 9 : \
+   LDBL_EXP_MASK < 0x400 ? 10 : \
+   LDBL_EXP_MASK < 0x800 ? 11 : \
+   LDBL_EXP_MASK < 0x1000 ? 12 : \
+   LDBL_EXP_MASK < 0x2000 ? 13 : \
+   LDBL_EXP_MASK < 0x4000 ? 14 : \
+   LDBL_EXP_MASK < 0x8000 ? 15 : \
+   LDBL_EXP_MASK < 0x10000 ? 16 : \
+   LDBL_EXP_MASK < 0x20000 ? 17 : \
+   LDBL_EXP_MASK < 0x40000 ? 18 : \
+   LDBL_EXP_MASK < 0x80000 ? 19 : \
+   LDBL_EXP_MASK < 0x100000 ? 20 : \
+   LDBL_EXP_MASK < 0x200000 ? 21 : \
+   LDBL_EXP_MASK < 0x400000 ? 22 : \
+   LDBL_EXP_MASK < 0x800000 ? 23 : \
+   LDBL_EXP_MASK < 0x1000000 ? 24 : \
+   LDBL_EXP_MASK < 0x2000000 ? 25 : \
+   LDBL_EXP_MASK < 0x4000000 ? 26 : \
+   LDBL_EXP_MASK < 0x8000000 ? 27 : \
+   LDBL_EXP_MASK < 0x10000000 ? 28 : \
+   LDBL_EXP_MASK < 0x20000000 ? 29 : \
+   LDBL_EXP_MASK < 0x40000000 ? 30 : \
+   LDBL_EXP_MASK <= 0x7fffffff ? 31 : \
+   32)
+
+/* Number of bits used for a floating-point number: the mantissa (not
+   counting the "hidden bit", since it may or may not be explicit), the
+   exponent, and the sign.  */
+#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1)
+#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1)
+#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1)
+
+/* Number of bytes used for a floating-point number.
+   This can be smaller than the 'sizeof'.  For example, on i386 systems,
+   'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence
+   LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but
+   sizeof (long double) = 12 or = 16.  */
+#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
+#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
+#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
+
+/* Verify that SIZEOF_FLT <= sizeof (float) etc.  */
+typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1];
+typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1];
+typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1];
+
+#endif /* _FLOATPLUS_H */
similarity index 51%
copy from contrib/diffutils/lib/mbslen.c
copy to contrib/diffutils/lib/float.c
index efddd52..366945f 100644 (file)
@@ -1,6 +1,6 @@
-/* Counting the multibyte characters in a string.
-   Copyright (C) 2007-2011 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2007.
+/* Auxiliary definitions for <float.h>.
+   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2011.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #include <config.h>
 
 /* Specification.  */
-#include <string.h>
-
-#include <stdlib.h>
-
-#include "mbuiter.h"
-
-/* Return the number of multibyte characters in the character string STRING.  */
-size_t
-mbslen (const char *string)
-{
-  if (MB_CUR_MAX > 1)
-    {
-      size_t count;
-      mbui_iterator_t iter;
-
-      count = 0;
-      for (mbui_init (iter, string); mbui_avail (iter); mbui_advance (iter))
-        count++;
-
-      return count;
-    }
-  else
-    return strlen (string);
-}
+#include <float.h>
+
+#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__
+const union gl_long_double_union gl_LDBL_MAX =
+  { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } };
+#elif defined __i386__
+const union gl_long_double_union gl_LDBL_MAX =
+  { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } };
+#else
+/* This declaration is solely to ensure that after preprocessing
+   this file is never empty.  */
+typedef int dummy;
+#endif
diff --git a/contrib/diffutils/lib/float.in.h b/contrib/diffutils/lib/float.in.h
new file mode 100644 (file)
index 0000000..84e1950
--- /dev/null
@@ -0,0 +1,188 @@
+/* A correct <float.h>.
+
+   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_FLOAT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_FLOAT_H@
+
+#ifndef _@GUARD_PREFIX@_FLOAT_H
+#define _@GUARD_PREFIX@_FLOAT_H
+
+/* 'long double' properties.  */
+
+#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__)
+/* Number of mantissa units, in base FLT_RADIX.  */
+# undef LDBL_MANT_DIG
+# define LDBL_MANT_DIG   64
+/* Number of decimal digits that is sufficient for representing a number.  */
+# undef LDBL_DIG
+# define LDBL_DIG        18
+/* x-1 where x is the smallest representable number > 1.  */
+# undef LDBL_EPSILON
+# define LDBL_EPSILON    1.0842021724855044340E-19L
+/* Minimum e such that FLT_RADIX^(e-1) is a normalized number.  */
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number.  */
+# undef LDBL_MAX_EXP
+# define LDBL_MAX_EXP    16384
+/* Minimum positive normalized number.  */
+# undef LDBL_MIN
+# define LDBL_MIN        3.3621031431120935063E-4932L
+/* Maximum representable finite number.  */
+# undef LDBL_MAX
+# define LDBL_MAX        1.1897314953572317650E+4932L
+/* Minimum e such that 10^e is in the range of normalized numbers.  */
+# undef LDBL_MIN_10_EXP
+# define LDBL_MIN_10_EXP (-4931)
+/* Maximum e such that 10^e is in the range of representable finite numbers.  */
+# undef LDBL_MAX_10_EXP
+# define LDBL_MAX_10_EXP 4932
+#endif
+
+/* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of
+   precision in the compiler but 64 bits of precision at runtime.  See
+   <http://lists.gnu.org/archive/html/bug-gnulib/2008-07/msg00063.html>.  */
+#if defined __i386__ && defined __FreeBSD__
+/* Number of mantissa units, in base FLT_RADIX.  */
+# undef LDBL_MANT_DIG
+# define LDBL_MANT_DIG   64
+/* Number of decimal digits that is sufficient for representing a number.  */
+# undef LDBL_DIG
+# define LDBL_DIG        18
+/* x-1 where x is the smallest representable number > 1.  */
+# undef LDBL_EPSILON
+# define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */
+/* Minimum e such that FLT_RADIX^(e-1) is a normalized number.  */
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number.  */
+# undef LDBL_MAX_EXP
+# define LDBL_MAX_EXP    16384
+/* Minimum positive normalized number.  */
+# undef LDBL_MIN
+# define LDBL_MIN        3.3621031431120935E-4932L /* = 0x1p-16382L */
+/* Maximum representable finite number.  */
+# undef LDBL_MAX
+/* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }.
+   But the largest literal that GCC allows us to write is
+   0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }.
+   So, define it like this through a reference to an external variable
+
+     const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 };
+     extern const long double LDBL_MAX;
+
+   Unfortunately, this is not a constant expression.  */
+union gl_long_double_union
+  {
+    struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd;
+    long double ld;
+  };
+extern const union gl_long_double_union gl_LDBL_MAX;
+# define LDBL_MAX (gl_LDBL_MAX.ld)
+/* Minimum e such that 10^e is in the range of normalized numbers.  */
+# undef LDBL_MIN_10_EXP
+# define LDBL_MIN_10_EXP (-4931)
+/* Maximum e such that 10^e is in the range of representable finite numbers.  */
+# undef LDBL_MAX_10_EXP
+# define LDBL_MAX_10_EXP 4932
+#endif
+
+/* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are
+   wrong.
+   On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong.  */
+#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP DBL_MIN_EXP
+# undef LDBL_MIN_10_EXP
+# define LDBL_MIN_10_EXP DBL_MIN_10_EXP
+# undef LDBL_MIN
+# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */
+#endif
+#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__
+# undef LDBL_MAX
+/* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }.
+   It is not easy to define:
+     #define LDBL_MAX 1.79769313486231580793728971405302307166e308L
+   is too small, whereas
+     #define LDBL_MAX 1.79769313486231580793728971405302307167e308L
+   is too large.  Apparently a bug in GCC decimal-to-binary conversion.
+   Also, I can't get values larger than
+     #define LDBL63 ((long double) (1ULL << 63))
+     #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)
+     #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)
+     #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)
+     #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL)
+   which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }.
+   So, define it like this through a reference to an external variable
+
+     const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL };
+     extern const long double LDBL_MAX;
+
+   or through a pointer cast
+
+     #define LDBL_MAX \
+       (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL })
+
+   Unfortunately, this is not a constant expression, and the latter expression
+   does not work well when GCC is optimizing..  */
+union gl_long_double_union
+  {
+    struct { double hi; double lo; } dd;
+    long double ld;
+  };
+extern const union gl_long_double_union gl_LDBL_MAX;
+# define LDBL_MAX (gl_LDBL_MAX.ld)
+#endif
+
+/* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong.
+   On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON
+   are wrong.  */
+#if defined __sgi && (LDBL_MANT_DIG >= 106)
+# undef LDBL_MANT_DIG
+# define LDBL_MANT_DIG 106
+# if defined __GNUC__
+#  undef LDBL_MIN_EXP
+#  define LDBL_MIN_EXP DBL_MIN_EXP
+#  undef LDBL_MIN_10_EXP
+#  define LDBL_MIN_10_EXP DBL_MIN_10_EXP
+#  undef LDBL_MIN
+#  define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */
+#  undef LDBL_EPSILON
+#  define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */
+# endif
+#endif
+
+#if @REPLACE_ITOLD@
+/* Pull in a function that fixes the 'int' to 'long double' conversion
+   of glibc 2.7.  */
+extern
+# ifdef __cplusplus
+"C"
+# endif
+void _Qp_itoq (long double *, int);
+static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq;
+#endif
+
+#endif /* _@GUARD_PREFIX@_FLOAT_H */
+#endif /* _@GUARD_PREFIX@_FLOAT_H */
index ecfc8fb..6a09e1a 100644 (file)
@@ -1,6 +1,4 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Copyright (C) 1991-1993, 1996-2007, 2009-2011 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1993, 1996-2007, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -13,8 +11,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _LIBC
 # include <config.h>
@@ -44,7 +41,7 @@
   (HAVE_WCTYPE_H && HAVE_BTOWC && HAVE_ISWCTYPE \
    && HAVE_WMEMCHR && (HAVE_WMEMCPY || HAVE_WMEMPCPY))
 
-/* For platform which support the ISO C amendement 1 functionality we
+/* For platform which support the ISO C amendment 1 functionality we
    support user defined character classes.  */
 #if defined _LIBC || WIDE_CHAR_SUPPORT
 # include <wctype.h>
@@ -80,7 +77,7 @@ extern int fnmatch (const char *pattern, const char *string, int flags);
    Library, but also included in many other GNU distributions.  Compiling
    and linking in this code is a waste when using the GNU C library
    (especially if it is a shared library).  Rather than having every GNU
-   program understand `configure --with-gnu-libc' and omit the object files,
+   program understand 'configure --with-gnu-libc' and omit the object files,
    it is simpler to just do this in the source for each such file.  */
 
 #if defined _LIBC || !defined __GNU_LIBRARY__ || !HAVE_FNMATCH_GNU
@@ -94,7 +91,7 @@ extern int fnmatch (const char *pattern, const char *string, int flags);
 
 # if defined _LIBC || WIDE_CHAR_SUPPORT
 /* The GNU C library provides support for user-defined character classes
-   and the functions from ISO C amendement 1.  */
+   and the functions from ISO C amendment 1.  */
 #  ifdef CHARCLASS_NAME_MAX
 #   define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
 #  else
@@ -121,7 +118,7 @@ extern int fnmatch (const char *pattern, const char *string, int flags);
 #  endif
 
 # else
-#  define CHAR_CLASS_MAX_LENGTH  6 /* Namely, `xdigit'.  */
+#  define CHAR_CLASS_MAX_LENGTH  6 /* Namely, 'xdigit'.  */
 
 #  define IS_CHAR_CLASS(string)                                               \
    (STREQ (string, "alpha") || STREQ (string, "upper")                        \
@@ -170,7 +167,6 @@ static int posixly_correct;
 #  endif
 # endif
 # define MEMCHR(S, C, N) memchr (S, C, N)
-# define STRCOLL(S1, S2) strcoll (S1, S2)
 # include "fnmatch_loop.c"
 
 
@@ -198,7 +194,6 @@ static int posixly_correct;
 #   endif
 #  endif
 #  define MEMCHR(S, C, N) wmemchr (S, C, N)
-#  define STRCOLL(S1, S2) wcscoll (S1, S2)
 #  define WIDE_CHAR_VERSION 1
 
 #  undef IS_CHAR_CLASS
index 06e7d8b..f57cd63 100644 (file)
@@ -1,6 +1,4 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Copyright (C) 1991-1993, 1996-2006, 2009-2011 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1993, 1996-2006, 2009-2013 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software; you can redistribute it and/or modify
@@ -14,8 +12,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 /* Match STRING against the file name pattern PATTERN, returning zero if
    it matches, nonzero if not.  */
@@ -218,7 +215,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end,
               return FNM_NOMATCH;
 
             if (*n == L_('/') && (flags & FNM_FILE_NAME))
-              /* `/' cannot be matched.  */
+              /* '/' cannot be matched.  */
               return FNM_NOMATCH;
 
             not = (*p == L_('!') || (posixly_correct < 0 && *p == L_('^')));
@@ -384,7 +381,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end,
                           {
                             /* We found a table entry.  Now see whether the
                                character we are currently at has the same
-                               equivalance class value.  */
+                               equivalence class value.  */
                             int len = weights[idx & 0xffffff];
                             int32_t idx2;
                             const UCHAR *np = (const UCHAR *) n;
@@ -638,7 +635,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end,
                         UCHAR cend = *p++;
 
 # ifdef WIDE_CHAR_VERSION
-                        /* Search in the `names' array for the characters.  */
+                        /* Search in the 'names' array for the characters.  */
                         fcollseq = __collseq_table_lookup (collseq, fn);
                         if (fcollseq == ~((uint32_t) 0))
                           /* XXX We don't know anything about the character
@@ -841,7 +838,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end,
 #else
                         /* We use a boring value comparison of the character
                            values.  This is better than comparing using
-                           `strcoll' since the latter would have surprising
+                           'strcoll' since the latter would have surprising
                            and sometimes fatal consequences.  */
                         UCHAR cend = *p++;
 
@@ -1158,7 +1155,7 @@ EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end,
 
     case L_('@'):
       do
-        /* I cannot believe it but `strcat' is actually acceptable
+        /* I cannot believe it but 'strcat' is actually acceptable
            here.  Match the entire string with the prefix from the
            pattern list and the rest of the pattern following the
            pattern list.  */
@@ -1216,7 +1213,6 @@ EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end,
 #undef END
 #undef MEMPCPY
 #undef MEMCHR
-#undef STRCOLL
 #undef STRLEN
 #undef STRCAT
 #undef L_
index 5b02817..9fe403b 100644 (file)
@@ -1,6 +1,6 @@
 /* Invoke freopen, but avoid some glitches.
 
-   Copyright (C) 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
diff --git a/contrib/diffutils/lib/fstat.c b/contrib/diffutils/lib/fstat.c
new file mode 100644 (file)
index 0000000..dc802f5
--- /dev/null
@@ -0,0 +1,88 @@
+/* fstat() replacement.
+   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* If the user's config.h happens to include <sys/stat.h>, let it include only
+   the system's <sys/stat.h> here, so that orig_fstat doesn't recurse to
+   rpl_fstat.  */
+#define __need_system_sys_stat_h
+#include <config.h>
+
+/* Get the original definition of fstat.  It might be defined as a macro.  */
+#include <sys/types.h>
+#include <sys/stat.h>
+#if _GL_WINDOWS_64_BIT_ST_SIZE
+# undef stat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */
+# define stat _stati64
+# undef fstat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */
+# define fstat _fstati64
+#endif
+#undef __need_system_sys_stat_h
+
+static int
+orig_fstat (int fd, struct stat *buf)
+{
+  return fstat (fd, buf);
+}
+
+/* Specification.  */
+/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc
+   eliminates this include because of the preliminary #include <sys/stat.h>
+   above.  */
+#include "sys/stat.h"
+
+#include <errno.h>
+#include <unistd.h>
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static int
+fstat_nothrow (int fd, struct stat *buf)
+{
+  int result;
+
+  TRY_MSVC_INVAL
+    {
+      result = orig_fstat (fd, buf);
+    }
+  CATCH_MSVC_INVAL
+    {
+      result = -1;
+      errno = EBADF;
+    }
+  DONE_MSVC_INVAL;
+
+  return result;
+}
+#else
+# define fstat_nothrow orig_fstat
+#endif
+
+int
+rpl_fstat (int fd, struct stat *buf)
+{
+#if REPLACE_FCHDIR && REPLACE_OPEN_DIRECTORY
+  /* Handle the case when rpl_open() used a dummy file descriptor to work
+     around an open() that can't normally visit directories.  */
+  const char *name = _gl_directory_name (fd);
+  if (name != NULL)
+    return stat (name, buf);
+#endif
+
+  return fstat_nothrow (fd, buf);
+}
index 7c9f704..ef0f4ce 100644 (file)
@@ -2,7 +2,7 @@
    NOTE: getopt is part of the C library, so if you don't know what
    "Keep this file name-space clean" means, talk to drepper@gnu.org
    before changing it!
-   Copyright (C) 1987-1996, 1998-2004, 2006, 2008-2011 Free Software
+   Copyright (C) 1987-1996, 1998-2004, 2006, 2008-2013 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
 # include <wchar.h>
 #endif
 
-/* This version of `getopt' appears to the caller like standard Unix `getopt'
+/* This version of 'getopt' appears to the caller like standard Unix 'getopt'
    but it behaves differently for the user, since it allows the user
    to intersperse the options with the other arguments.
 
-   As `getopt_long' works, it permutes the elements of ARGV so that,
+   As 'getopt_long' works, it permutes the elements of ARGV so that,
    when it is done, all the options precede everything else.  Thus
    all application programs are extended to handle flexible argument order.
 
-   Using `getopt' or setting the environment variable POSIXLY_CORRECT
+   Using 'getopt' or setting the environment variable POSIXLY_CORRECT
    disables permutation.
    Then the behavior is completely standard.
 
 
 #include "getopt_int.h"
 
-/* For communication from `getopt' to the caller.
-   When `getopt' finds an option that takes an argument,
+/* For communication from 'getopt' to the caller.
+   When 'getopt' finds an option that takes an argument,
    the argument value is returned here.
-   Also, when `ordering' is RETURN_IN_ORDER,
+   Also, when 'ordering' is RETURN_IN_ORDER,
    each non-option ARGV-element is returned here.  */
 
 char *optarg;
 
 /* Index in ARGV of the next element to be scanned.
    This is used for communication to and from the caller
-   and for communication between successive calls to `getopt'.
+   and for communication between successive calls to 'getopt'.
 
-   On entry to `getopt', zero means this is the first call; initialize.
+   On entry to 'getopt', zero means this is the first call; initialize.
 
-   When `getopt' returns -1, this is the index of the first of the
+   When 'getopt' returns -1, this is the index of the first of the
    non-option elements that the caller should itself scan.
 
-   Otherwise, `optind' communicates from one call to the next
+   Otherwise, 'optind' communicates from one call to the next
    how much of ARGV has been scanned so far.  */
 
 /* 1003.2 says this must be 1 before any call.  */
@@ -137,7 +137,7 @@ extern char *__getopt_nonoption_flags;
    The other is elements [last_nonopt,optind), which contains all
    the options processed since those non-options were skipped.
 
-   `first_nonopt' and `last_nonopt' are relocated so that they describe
+   'first_nonopt' and 'last_nonopt' are relocated so that they describe
    the new indices of the non-options in ARGV after they are moved.  */
 
 static void
@@ -154,7 +154,7 @@ exchange (char **argv, struct _getopt_data *d)
      but it consists of two parts that need to be swapped next.  */
 
 #if defined _LIBC && defined USE_NONOPTION_FLAGS
-  /* First make sure the handling of the `__getopt_nonoption_flags'
+  /* First make sure the handling of the '__getopt_nonoption_flags'
      string can work normally.  Our top argument must be in the range
      of the string.  */
   if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len)
@@ -291,48 +291,48 @@ _getopt_initialize (int argc _GL_UNUSED,
 
    If an element of ARGV starts with '-', and is not exactly "-" or "--",
    then it is an option element.  The characters of this element
-   (aside from the initial '-') are option characters.  If `getopt'
+   (aside from the initial '-') are option characters.  If 'getopt'
    is called repeatedly, it returns successively each of the option characters
    from each of the option elements.
 
-   If `getopt' finds another option character, it returns that character,
-   updating `optind' and `nextchar' so that the next call to `getopt' can
+   If 'getopt' finds another option character, it returns that character,
+   updating 'optind' and 'nextchar' so that the next call to 'getopt' can
    resume the scan with the following option character or ARGV-element.
 
-   If there are no more option characters, `getopt' returns -1.
-   Then `optind' is the index in ARGV of the first ARGV-element
+   If there are no more option characters, 'getopt' returns -1.
+   Then 'optind' is the index in ARGV of the first ARGV-element
    that is not an option.  (The ARGV-elements have been permuted
    so that those that are not options now come last.)
 
    OPTSTRING is a string containing the legitimate option characters.
    If an option character is seen that is not listed in OPTSTRING,
-   return '?' after printing an error message.  If you set `opterr' to
+   return '?' after printing an error message.  If you set 'opterr' to
    zero, the error message is suppressed but we still return '?'.
 
    If a char in OPTSTRING is followed by a colon, that means it wants an arg,
    so the following text in the same ARGV-element, or the text of the following
-   ARGV-element, is returned in `optarg'.  Two colons mean an option that
+   ARGV-element, is returned in 'optarg'.  Two colons mean an option that
    wants an optional arg; if there is text in the current ARGV-element,
-   it is returned in `optarg', otherwise `optarg' is set to zero.
+   it is returned in 'optarg', otherwise 'optarg' is set to zero.
 
-   If OPTSTRING starts with `-' or `+', it requests different methods of
+   If OPTSTRING starts with '-' or '+', it requests different methods of
    handling the non-option ARGV-elements.
    See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
 
-   Long-named options begin with `--' instead of `-'.
+   Long-named options begin with '--' instead of '-'.
    Their names may be abbreviated as long as the abbreviation is unique
    or is an exact match for some defined option.  If they have an
    argument, it follows the option name in the same ARGV-element, separated
-   from the option name by a `=', or else the in next ARGV-element.
-   When `getopt' finds a long-named option, it returns 0 if that option's
-   `flag' field is nonzero, the value of the option's `val' field
-   if the `flag' field is zero.
+   from the option name by a '=', or else the in next ARGV-element.
+   When 'getopt' finds a long-named option, it returns 0 if that option's
+   'flag' field is nonzero, the value of the option's 'val' field
+   if the 'flag' field is zero.
 
    The elements of ARGV aren't really const, because we permute them.
    But we pretend they're const in the prototype to be compatible
    with other systems.
 
-   LONGOPTS is a vector of `struct option' terminated by an
+   LONGOPTS is a vector of 'struct option' terminated by an
    element containing a name which is zero.
 
    LONGIND returns the index in LONGOPT of the long-named option found.
@@ -409,7 +409,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
           d->__last_nonopt = d->optind;
         }
 
-      /* The special ARGV-element `--' means premature end of options.
+      /* The special ARGV-element '--' means premature end of options.
          Skip it like a null option,
          then exchange with previous non-options as if it were an option,
          then skip everything else like a non-option.  */
@@ -788,7 +788,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
     char c = *d->__nextchar++;
     const char *temp = strchr (optstring, c);
 
-    /* Increment `optind' when we start to process its last character.  */
+    /* Increment 'optind' when we start to process its last character.  */
     if (*d->__nextchar == '\0')
       ++d->optind;
 
@@ -887,7 +887,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
             return c;
           }
         else
-          /* We already incremented `d->optind' once;
+          /* We already incremented 'd->optind' once;
              increment it again when taking next ARGV-elt as argument.  */
           d->optarg = argv[d->optind++];
 
@@ -1114,7 +1114,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                   c = '?';
               }
             else
-              /* We already incremented `optind' once;
+              /* We already incremented 'optind' once;
                  increment it again when taking next ARGV-elt as argument.  */
               d->optarg = argv[d->optind++];
             d->__nextchar = NULL;
@@ -1177,7 +1177,7 @@ __posix_getopt (int argc, char *const *argv, const char *optstring)
 #ifdef TEST
 
 /* Compile with -DTEST to make an executable for use in testing
-   the above definition of `getopt'.  */
+   the above definition of 'getopt'.  */
 
 int
 main (int argc, char **argv)
index 3656802..55a6b4e 100644 (file)
@@ -1,5 +1,5 @@
 /* getopt_long and getopt_long_only entry points for GNU getopt.
-   Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2011 Free Software
+   Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2013 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -141,11 +141,11 @@ main (int argc, char **argv)
           break;
 
         case 'c':
-          printf ("option c with value `%s'\n", optarg);
+          printf ("option c with value '%s'\n", optarg);
           break;
 
         case 'd':
-          printf ("option d with value `%s'\n", optarg);
+          printf ("option d with value '%s'\n", optarg);
           break;
 
         case '?':
index 9f0c713..a6e4b9e 100644 (file)
@@ -1,5 +1,5 @@
 /* Internal declarations for getopt.
-   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2011 Free Software
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2013 Free Software
    Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -40,7 +40,7 @@ extern int _getopt_internal (int ___argc, char **___argv,
    stop option processing when the first non-option is seen.
    This is what Unix does.
    This mode of operation is selected by either setting the environment
-   variable POSIXLY_CORRECT, or using `+' as the first character
+   variable POSIXLY_CORRECT, or using '+' as the first character
    of the list of option characters, or by calling getopt.
 
    PERMUTE is the default.  We permute the contents of ARGV as we
@@ -52,12 +52,12 @@ extern int _getopt_internal (int ___argc, char **___argv,
    written to expect options and other ARGV-elements in any order
    and that care about the ordering of the two.  We describe each
    non-option ARGV-element as if it were the argument of an option
-   with character code 1.  Using `-' as the first character of the
+   with character code 1.  Using '-' as the first character of the
    list of option characters selects this mode of operation.
 
-   The special argument `--' forces an end of option-scanning regardless
-   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
-   `--' can cause `getopt' to return -1 with `optind' != ARGC.  */
+   The special argument '--' forces an end of option-scanning regardless
+   of the value of 'ordering'.  In the case of RETURN_IN_ORDER, only
+   '--' can cause 'getopt' to return -1 with 'optind' != ARGC.  */
 
 enum __ord
   {
@@ -99,8 +99,8 @@ struct _getopt_data
   /* Handle permutation of arguments.  */
 
   /* Describe the part of ARGV that contains non-options that have
-     been skipped.  `first_nonopt' is the index in ARGV of the first
-     of them; `last_nonopt' is the index after the last of them.  */
+     been skipped.  'first_nonopt' is the index in ARGV of the first
+     of them; 'last_nonopt' is the index after the last of them.  */
 
   int __first_nonopt;
   int __last_nonopt;
index ef04443..d021571 100644 (file)
@@ -1,7 +1,5 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 /* Convenience header for conditional use of GNU <libintl.h>.
-   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2011 Free Software
+   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2013 Free Software
    Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -15,8 +13,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License along
-   with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _LIBGETTEXT_H
 #define _LIBGETTEXT_H 1
@@ -186,9 +183,12 @@ npgettext_aux (const char *domain,
 
 #include <string.h>
 
-#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
-  (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \
-   /* || __STDC_VERSION__ >= 199901L */ )
+#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \
+     /* || __STDC_VERSION__ >= 199901L */ )
+# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1
+#else
+# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
+#endif
 
 #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
 #include <stdlib.h>
index 6dbb457..0a642dd 100644 (file)
@@ -1,6 +1,6 @@
 /* gettime -- get the system clock
 
-   Copyright (C) 2002, 2004-2007, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004-2007, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index 26e614b..d55658d 100644 (file)
@@ -1,6 +1,6 @@
 /* hard-locale.c -- Determine whether a locale is hard.
 
-   Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2011 Free Software
+   Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2013 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
index 7540628..1d43607 100644 (file)
@@ -1,6 +1,6 @@
 /* Determine whether a locale is hard.
 
-   Copyright (C) 1999, 2003-2004, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2003-2004, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index 4d76f76..685928e 100644 (file)
@@ -1,6 +1,6 @@
 /* hash - hashing table processing.
 
-   Copyright (C) 1998-2004, 2006-2007, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 1998-2004, 2006-2007, 2009-2013 Free Software Foundation, Inc.
 
    Written by Jim Meyering, 1992.
 
@@ -63,7 +63,7 @@ struct hash_table
     /* Tuning arguments, kept in a physically separate structure.  */
     const Hash_tuning *tuning;
 
-    /* Three functions are given to `hash_initialize', see the documentation
+    /* Three functions are given to 'hash_initialize', see the documentation
        block for this function.  In a word, HASHER randomizes a user entry
        into a number up from 0 up to some maximum minus 1; COMPARATOR returns
        true if two user entries compare equally; and DATA_FREER is the cleanup
@@ -87,23 +87,23 @@ struct hash_table
    some user-provided data (also called a user entry).  An entry indistinctly
    refers to both the internal entry and its associated user entry.  A user
    entry contents may be hashed by a randomization function (the hashing
-   function, or just `hasher' for short) into a number (or `slot') between 0
+   function, or just "hasher" for short) into a number (or "slot") between 0
    and the current table size.  At each slot position in the hash table,
    starts a linked chain of entries for which the user data all hash to this
    slot.  A bucket is the collection of all entries hashing to the same slot.
 
-   A good `hasher' function will distribute entries rather evenly in buckets.
+   A good "hasher" function will distribute entries rather evenly in buckets.
    In the ideal case, the length of each bucket is roughly the number of
    entries divided by the table size.  Finding the slot for a data is usually
-   done in constant time by the `hasher', and the later finding of a precise
+   done in constant time by the "hasher", and the later finding of a precise
    entry is linear in time with the size of the bucket.  Consequently, a
    larger hash table size (that is, a larger number of buckets) is prone to
-   yielding shorter chains, *given* the `hasher' function behaves properly.
+   yielding shorter chains, *given* the "hasher" function behaves properly.
 
    Long buckets slow down the lookup algorithm.  One might use big hash table
    sizes in hope to reduce the average length of buckets, but this might
    become inordinate, as unused slots in the hash table take some space.  The
-   best bet is to make sure you are using a good `hasher' function (beware
+   best bet is to make sure you are using a good "hasher" function (beware
    that those are not that easy to write! :-), and to use a table size
    larger than the actual number of entries.  */
 
@@ -113,8 +113,8 @@ struct hash_table
    1.0).  The growth threshold defaults to 0.8, and the growth factor
    defaults to 1.414, meaning that the table will have doubled its size
    every second time 80% of the buckets get used.  */
-#define DEFAULT_GROWTH_THRESHOLD 0.8
-#define DEFAULT_GROWTH_FACTOR 1.414
+#define DEFAULT_GROWTH_THRESHOLD 0.8f
+#define DEFAULT_GROWTH_FACTOR 1.414f
 
 /* If a deletion empties a bucket and causes the ratio of used buckets to
    table size to become smaller than the shrink threshold (a number between
@@ -122,8 +122,8 @@ struct hash_table
    number greater than the shrink threshold but smaller than 1.0).  The shrink
    threshold and factor default to 0.0 and 1.0, meaning that the table never
    shrinks.  */
-#define DEFAULT_SHRINK_THRESHOLD 0.0
-#define DEFAULT_SHRINK_FACTOR 1.0
+#define DEFAULT_SHRINK_THRESHOLD 0.0f
+#define DEFAULT_SHRINK_FACTOR 1.0f
 
 /* Use this to initialize or reset a TUNING structure to
    some sensible values. */
@@ -300,7 +300,7 @@ hash_get_first (const Hash_table *table)
 }
 
 /* Return the user data for the entry following ENTRY, where ENTRY has been
-   returned by a previous call to either `hash_get_first' or `hash_get_next'.
+   returned by a previous call to either 'hash_get_first' or 'hash_get_next'.
    Return NULL if there are no more entries.  */
 
 void *
@@ -419,9 +419,9 @@ hash_string (const char *string, size_t n_buckets)
 
 #else /* not USE_DIFF_HASH */
 
-/* This one comes from `recode', and performs a bit better than the above as
+/* This one comes from 'recode', and performs a bit better than the above as
    per a few experiments.  It is inspired from a hashing routine found in the
-   very old Cyber `snoop', itself written in typical Greg Mansfield style.
+   very old Cyber 'snoop', itself written in typical Greg Mansfield style.
    (By the way, what happened to this excellent man?  Is he still alive?)  */
 
 size_t
@@ -440,7 +440,7 @@ hash_string (const char *string, size_t n_buckets)
 /* Return true if CANDIDATE is a prime number.  CANDIDATE should be an odd
    number at least equal to 11.  */
 
-static bool
+static bool _GL_ATTRIBUTE_CONST
 is_prime (size_t candidate)
 {
   size_t divisor = 3;
@@ -459,7 +459,7 @@ is_prime (size_t candidate)
 /* Round a given CANDIDATE number up to the nearest prime, and return that
    prime.  Primes lower than 10 are merely skipped.  */
 
-static size_t
+static size_t _GL_ATTRIBUTE_CONST
 next_prime (size_t candidate)
 {
   /* Skip small primes.  */
@@ -540,7 +540,7 @@ check_tuning (Hash_table *table)
    TUNING, or return 0 if there is no possible way to allocate that
    many entries.  */
 
-static size_t
+static size_t _GL_ATTRIBUTE_PURE
 compute_bucket_size (size_t candidate, const Hash_tuning *tuning)
 {
   if (!tuning->is_n_buckets)
@@ -584,9 +584,9 @@ compute_bucket_size (size_t candidate, const Hash_tuning *tuning)
 
    The user-supplied DATA_FREER function, when not NULL, may be later called
    with the user data as an argument, just before the entry containing the
-   data gets freed.  This happens from within `hash_free' or `hash_clear'.
+   data gets freed.  This happens from within 'hash_free' or 'hash_clear'.
    You should specify this function only if you want these functions to free
-   all of your `data' data.  This is typically the case when your data is
+   all of your 'data' data.  This is typically the case when your data is
    simply an auxiliary struct that you have malloc'd to aggregate several
    values.  */
 
@@ -1018,7 +1018,9 @@ hash_rehash (Hash_table *table, size_t candidate)
   return false;
 }
 
-/* Return -1 upon memory allocation failure.
+/* Insert ENTRY into hash TABLE if there is not already a matching entry.
+
+   Return -1 upon memory allocation failure.
    Return 1 if insertion succeeded.
    Return 0 if there is already a matching entry in the table,
    and in that case, if MATCHED_ENT is non-NULL, set *MATCHED_ENT
@@ -1030,10 +1032,11 @@ hash_rehash (Hash_table *table, size_t candidate)
    hash_insert, the only way to distinguish those cases is to compare
    the return value and ENTRY.  That works only when you can have two
    different ENTRY values that point to data that compares "equal".  Thus,
-   when the ENTRY value is a simple scalar, you must use hash_insert0.
-   ENTRY must not be NULL.  */
+   when the ENTRY value is a simple scalar, you must use
+   hash_insert_if_absent.  ENTRY must not be NULL.  */
 int
-hash_insert0 (Hash_table *table, void const *entry, void const **matched_ent)
+hash_insert_if_absent (Hash_table *table, void const *entry,
+                       void const **matched_ent)
 {
   void *data;
   struct hash_entry *bucket;
@@ -1113,6 +1116,14 @@ hash_insert0 (Hash_table *table, void const *entry, void const **matched_ent)
   return 1;
 }
 
+/* hash_insert0 is the deprecated name for hash_insert_if_absent.
+   .  */
+int
+hash_insert0 (Hash_table *table, void const *entry, void const **matched_ent)
+{
+  return hash_insert_if_absent (table, entry, matched_ent);
+}
+
 /* If ENTRY matches an entry already in the hash table, return the pointer
    to the entry from the table.  Otherwise, insert ENTRY and return ENTRY.
    Return NULL if the storage required for insertion cannot be allocated.
@@ -1123,7 +1134,7 @@ void *
 hash_insert (Hash_table *table, void const *entry)
 {
   void const *matched_ent;
-  int err = hash_insert0 (table, entry, &matched_ent);
+  int err = hash_insert_if_absent (table, entry, &matched_ent);
   return (err == -1
           ? NULL
           : (void *) (err == 0 ? matched_ent : entry));
index 9f694be..bcd0d1d 100644 (file)
@@ -1,5 +1,5 @@
 /* hash - hashing table processing.
-   Copyright (C) 1998-1999, 2001, 2003, 2009-2011 Free Software Foundation,
+   Copyright (C) 1998-1999, 2001, 2003, 2009-2013 Free Software Foundation,
    Inc.
    Written by Jim Meyering <meyering@ascend.com>, 1998.
 
@@ -19,7 +19,7 @@
 /* A generic hash table package.  */
 
 /* Make sure USE_OBSTACK is defined to 1 if you want the allocator to use
-   obstacks instead of malloc, and recompile `hash.c' with same setting.  */
+   obstacks instead of malloc, and recompile 'hash.c' with same setting.  */
 
 #ifndef HASH_H_
 # define HASH_H_
 #  define _GL_ATTRIBUTE_WUR /* empty */
 # endif
 
+# ifndef _GL_ATTRIBUTE_DEPRECATED
+/* The __attribute__((__deprecated__)) feature
+   is available in gcc versions 3.1 and newer.  */
+#  if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 1)
+#   define _GL_ATTRIBUTE_DEPRECATED /* empty */
+#  else
+#   define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__))
+#  endif
+# endif
+
 typedef size_t (*Hash_hasher) (const void *, size_t);
 typedef bool (*Hash_comparator) (const void *, const void *);
 typedef void (*Hash_data_freer) (void *);
@@ -42,8 +52,8 @@ typedef bool (*Hash_processor) (void *, void *);
 
 struct hash_tuning
   {
-    /* This structure is mainly used for `hash_initialize', see the block
-       documentation of `hash_reset_tuning' for more complete comments.  */
+    /* This structure is mainly used for 'hash_initialize', see the block
+       documentation of 'hash_reset_tuning' for more complete comments.  */
 
     float shrink_threshold;     /* ratio of used buckets to trigger a shrink */
     float shrink_factor;        /* ratio of new smaller size to original size */
@@ -59,22 +69,22 @@ struct hash_table;
 typedef struct hash_table Hash_table;
 
 /* Information and lookup.  */
-size_t hash_get_n_buckets (const Hash_table *);
-size_t hash_get_n_buckets_used (const Hash_table *);
-size_t hash_get_n_entries (const Hash_table *);
-size_t hash_get_max_bucket_length (const Hash_table *);
-bool hash_table_ok (const Hash_table *);
+size_t hash_get_n_buckets (const Hash_table *) _GL_ATTRIBUTE_PURE;
+size_t hash_get_n_buckets_used (const Hash_table *) _GL_ATTRIBUTE_PURE;
+size_t hash_get_n_entries (const Hash_table *) _GL_ATTRIBUTE_PURE;
+size_t hash_get_max_bucket_length (const Hash_table *) _GL_ATTRIBUTE_PURE;
+bool hash_table_ok (const Hash_table *) _GL_ATTRIBUTE_PURE;
 void hash_print_statistics (const Hash_table *, FILE *);
 void *hash_lookup (const Hash_table *, const void *);
 
 /* Walking.  */
-void *hash_get_first (const Hash_table *);
+void *hash_get_first (const Hash_table *) _GL_ATTRIBUTE_PURE;
 void *hash_get_next (const Hash_table *, const void *);
 size_t hash_get_entries (const Hash_table *, void **, size_t);
 size_t hash_do_for_each (const Hash_table *, Hash_processor, void *);
 
 /* Allocation and clean-up.  */
-size_t hash_string (const char *, size_t);
+size_t hash_string (const char *, size_t) _GL_ATTRIBUTE_PURE;
 void hash_reset_tuning (Hash_tuning *);
 Hash_table *hash_initialize (size_t, const Hash_tuning *,
                              Hash_hasher, Hash_comparator,
@@ -85,8 +95,13 @@ void hash_free (Hash_table *);
 /* Insertion and deletion.  */
 bool hash_rehash (Hash_table *, size_t) _GL_ATTRIBUTE_WUR;
 void *hash_insert (Hash_table *, const void *) _GL_ATTRIBUTE_WUR;
-int hash_insert0 (Hash_table *table, const void *entry,
-                  const void **matched_ent);
+
+/* Deprecate this interface.  It has been renamed to hash_insert_if_absent.  */
+int hash_insert0 (Hash_table *table, /* FIXME: remove in 2013 */
+                  const void *entry,
+                  const void **matched_ent) _GL_ATTRIBUTE_DEPRECATED;
+int hash_insert_if_absent (Hash_table *table, const void *entry,
+                           const void **matched_ent);
 void *hash_delete (Hash_table *, const void *);
 
 #endif
index f021a1a..63ecde8 100644 (file)
@@ -1,6 +1,6 @@
 /* ignore a function return without a compiler warning
 
-   Copyright (C) 2008-2011 Free Software Foundation, Inc.
+   Copyright (C) 2008-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #ifndef _GL_IGNORE_VALUE_H
 # define _GL_IGNORE_VALUE_H
 
-# ifndef _GL_ATTRIBUTE_DEPRECATED
-/* The __attribute__((__deprecated__)) feature
-   is available in gcc versions 3.1 and newer.  */
-#  if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 1)
-#   define _GL_ATTRIBUTE_DEPRECATED /* empty */
-#  else
-#   define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__))
-#  endif
-# endif
-
 /* The __attribute__((__warn_unused_result__)) feature
    is available in gcc versions 3.4 and newer,
    while the typeof feature has been available since 2.7 at least.  */
@@ -54,9 +44,4 @@
 #  define ignore_value(x) (({ __typeof__ (x) __x = (x); (void) __x; }))
 # endif
 
-/* ignore_value works for scalars, pointers and aggregates;
-   deprecate ignore_ptr.  */
-static inline void _GL_ATTRIBUTE_DEPRECATED
-ignore_ptr (void *p) { (void) p; } /* deprecated: use ignore_value */
-
 #endif
index 1f6a539..b473052 100644 (file)
@@ -1,6 +1,6 @@
 /* intprops.h -- properties of integer types
 
-   Copyright (C) 2001-2005, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2001-2005, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index 1825f56..4605145 100644 (file)
@@ -1,6 +1,6 @@
 /* inttostr.h -- convert integers to printable strings
 
-   Copyright (C) 2001-2006, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2001-2006, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
similarity index 64%
copy from contrib/diffutils/lib/exitfail.c
copy to contrib/diffutils/lib/itold.c
index 953aa02..9aabc7e 100644 (file)
@@ -1,6 +1,6 @@
-/* Failure exit status
-
-   Copyright (C) 2002-2003, 2005-2007, 2009-2011 Free Software Foundation, Inc.
+/* Replacement for 'int' to 'long double' conversion routine.
+   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2011.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 #include <config.h>
 
-#include "exitfail.h"
-
-#include <stdlib.h>
+/* Specification.  */
+#include <float.h>
 
-int volatile exit_failure = EXIT_FAILURE;
+void
+_Qp_itoq (long double *result, int a)
+{
+  /* Convert from 'int' to 'double', then from 'double' to 'long double'.  */
+  *result = (double) a;
+}
index d8b5953..953cc1e 100644 (file)
@@ -1,8 +1,6 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 /* Determine a canonical name for the current locale's character encoding.
 
-   Copyright (C) 2000-2006, 2008-2011 Free Software Foundation, Inc.
+   Copyright (C) 2000-2006, 2008-2013 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -15,8 +13,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License along
-   with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>.  */
 
 #include <stdlib.h>
 
 #if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET
-# define DARWIN7 /* Darwin 7 or newer, i.e. MacOS X 10.3 or newer */
+# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */
 #endif
 
 #if defined _WIN32 || defined __WIN32__
-# define WIN32_NATIVE
+# define WINDOWS_NATIVE
 #endif
 
 #if defined __EMX__
@@ -46,7 +43,7 @@
 # endif
 #endif
 
-#if !defined WIN32_NATIVE
+#if !defined WINDOWS_NATIVE
 # include <unistd.h>
 # if HAVE_LANGINFO_CODESET
 #  include <langinfo.h>
@@ -59,7 +56,7 @@
 #  define WIN32_LEAN_AND_MEAN
 #  include <windows.h>
 # endif
-#elif defined WIN32_NATIVE
+#elif defined WINDOWS_NATIVE
 # define WIN32_LEAN_AND_MEAN
 # include <windows.h>
 #endif
@@ -85,7 +82,7 @@
 #endif
 
 #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
-  /* Win32, Cygwin, OS/2, DOS */
+  /* Native Windows, Cygwin, OS/2, DOS */
 # define ISSLASH(C) ((C) == '/' || (C) == '\\')
 #endif
 
@@ -125,7 +122,7 @@ get_charset_aliases (void)
   cp = charset_aliases;
   if (cp == NULL)
     {
-#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
+#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__)
       const char *dir;
       const char *base = "charset.alias";
       char *file_name;
@@ -310,7 +307,7 @@ get_charset_aliases (void)
            "DECKOREAN" "\0" "EUC-KR" "\0";
 # endif
 
-# if defined WIN32_NATIVE || defined __CYGWIN__
+# if defined WINDOWS_NATIVE || defined __CYGWIN__
       /* To avoid the troubles of installing a separate file in the same
          directory as the DLL and of retrieving the DLL's directory at
          runtime, simply inline the aliases here.  */
@@ -362,7 +359,7 @@ locale_charset (void)
   const char *codeset;
   const char *aliases;
 
-#if !(defined WIN32_NATIVE || defined OS2)
+#if !(defined WINDOWS_NATIVE || defined OS2)
 
 # if HAVE_LANGINFO_CODESET
 
@@ -409,10 +406,10 @@ locale_charset (void)
             }
         }
 
-      /* Woe32 has a function returning the locale's codepage as a number:
-         GetACP().  This encoding is used by Cygwin, unless the user has set
-         the environment variable CYGWIN=codepage:oem (which very few people
-         do).
+      /* The Windows API has a function returning the locale's codepage as a
+         number: GetACP().  This encoding is used by Cygwin, unless the user
+         has set the environment variable CYGWIN=codepage:oem (which very few
+         people do).
          Output directed to console windows needs to be converted (to
          GetOEMCP() if the console is using a raster font, or to
          GetConsoleOutputCP() if it is using a TrueType font).  Cygwin does
@@ -455,12 +452,12 @@ locale_charset (void)
 
 # endif
 
-#elif defined WIN32_NATIVE
+#elif defined WINDOWS_NATIVE
 
   static char buf[2 + 10 + 1];
 
-  /* Woe32 has a function returning the locale's codepage as a number:
-     GetACP().
+  /* The Windows API has a function returning the locale's codepage as a
+     number: GetACP().
      When the output goes to a console window, it needs to be provided in
      GetOEMCP() encoding if the console is using a raster font, or in
      GetConsoleOutputCP() encoding if it is using a TrueType font.
@@ -545,5 +542,12 @@ locale_charset (void)
   if (codeset[0] == '\0')
     codeset = "ASCII";
 
+#ifdef DARWIN7
+  /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8"
+     (the default codeset) does not work when MB_CUR_MAX is 1.  */
+  if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX <= 1)
+    codeset = "ASCII";
+#endif
+
   return codeset;
 }
index 53c8a94..c209829 100644 (file)
@@ -1,7 +1,5 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 /* Determine a canonical name for the current locale's character encoding.
-   Copyright (C) 2000-2003, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2000-2003, 2009-2013 Free Software Foundation, Inc.
    This file is part of the GNU CHARSET Library.
 
    This program is free software; you can redistribute it and/or modify
@@ -15,8 +13,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License along
-   with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _LOCALCHARSET_H
 #define _LOCALCHARSET_H
diff --git a/contrib/diffutils/lib/locale.in.h b/contrib/diffutils/lib/locale.in.h
new file mode 100644 (file)
index 0000000..264161a
--- /dev/null
@@ -0,0 +1,216 @@
+/* A POSIX <locale.h>.
+   Copyright (C) 2007-2013 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#ifdef _GL_ALREADY_INCLUDING_LOCALE_H
+
+/* Special invocation conventions to handle Solaris header files
+   (through Solaris 10) when combined with gettext's libintl.h.  */
+
+#@INCLUDE_NEXT@ @NEXT_LOCALE_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_LOCALE_H
+
+#define _GL_ALREADY_INCLUDING_LOCALE_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_LOCALE_H@
+
+#undef _GL_ALREADY_INCLUDING_LOCALE_H
+
+#ifndef _@GUARD_PREFIX@_LOCALE_H
+#define _@GUARD_PREFIX@_LOCALE_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* Mac OS X 10.5 defines the locale_t type in <xlocale.h>.  */
+#if @HAVE_XLOCALE_H@
+# include <xlocale.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C.
+   On systems that don't define it, use the same value as GNU libintl.  */
+#if !defined LC_MESSAGES
+# define LC_MESSAGES 1729
+#endif
+
+/* Bionic libc's 'struct lconv' is just a dummy.  */
+#if @REPLACE_STRUCT_LCONV@
+# define lconv rpl_lconv
+struct lconv
+{
+  /* All 'char *' are actually 'const char *'.  */
+
+  /* Members that depend on the LC_NUMERIC category of the locale.  See
+     <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_04> */
+
+  /* Symbol used as decimal point.  */
+  char *decimal_point;
+  /* Symbol used to separate groups of digits to the left of the decimal
+     point.  */
+  char *thousands_sep;
+  /* Definition of the size of groups of digits to the left of the decimal
+     point.  */
+  char *grouping;
+
+  /* Members that depend on the LC_MONETARY category of the locale.  See
+     <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_03> */
+
+  /* Symbol used as decimal point.  */
+  char *mon_decimal_point;
+  /* Symbol used to separate groups of digits to the left of the decimal
+     point.  */
+  char *mon_thousands_sep;
+  /* Definition of the size of groups of digits to the left of the decimal
+     point.  */
+  char *mon_grouping;
+  /* Sign used to indicate a value >= 0.  */
+  char *positive_sign;
+  /* Sign used to indicate a value < 0.  */
+  char *negative_sign;
+
+  /* For formatting local currency.  */
+  /* Currency symbol (3 characters) followed by separator (1 character).  */
+  char *currency_symbol;
+  /* Number of digits after the decimal point.  */
+  char frac_digits;
+  /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it
+     comes after the number.  */
+  char p_cs_precedes;
+  /* For values >= 0: Position of the sign.  */
+  char p_sign_posn;
+  /* For values >= 0: Placement of spaces between currency symbol, sign, and
+     number.  */
+  char p_sep_by_space;
+  /* For values < 0: 1 if the currency symbol precedes the number, 0 if it
+     comes after the number.  */
+  char n_cs_precedes;
+  /* For values < 0: Position of the sign.  */
+  char n_sign_posn;
+  /* For values < 0: Placement of spaces between currency symbol, sign, and
+     number.  */
+  char n_sep_by_space;
+
+  /* For formatting international currency.  */
+  /* Currency symbol (3 characters) followed by separator (1 character).  */
+  char *int_curr_symbol;
+  /* Number of digits after the decimal point.  */
+  char int_frac_digits;
+  /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it
+     comes after the number.  */
+  char int_p_cs_precedes;
+  /* For values >= 0: Position of the sign.  */
+  char int_p_sign_posn;
+  /* For values >= 0: Placement of spaces between currency symbol, sign, and
+     number.  */
+  char int_p_sep_by_space;
+  /* For values < 0: 1 if the currency symbol precedes the number, 0 if it
+     comes after the number.  */
+  char int_n_cs_precedes;
+  /* For values < 0: Position of the sign.  */
+  char int_n_sign_posn;
+  /* For values < 0: Placement of spaces between currency symbol, sign, and
+     number.  */
+  char int_n_sep_by_space;
+};
+#endif
+
+#if @GNULIB_LOCALECONV@
+# if @REPLACE_LOCALECONV@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef localeconv
+#   define localeconv rpl_localeconv
+#  endif
+_GL_FUNCDECL_RPL (localeconv, struct lconv *, (void));
+_GL_CXXALIAS_RPL (localeconv, struct lconv *, (void));
+# else
+_GL_CXXALIAS_SYS (localeconv, struct lconv *, (void));
+# endif
+_GL_CXXALIASWARN (localeconv);
+#elif @REPLACE_STRUCT_LCONV@
+# undef localeconv
+# define localeconv localeconv_used_without_requesting_gnulib_module_localeconv
+#elif defined GNULIB_POSIXCHECK
+# undef localeconv
+# if HAVE_RAW_DECL_LOCALECONV
+_GL_WARN_ON_USE (localeconv,
+                 "localeconv returns too few information on some platforms - "
+                 "use gnulib module localeconv for portability");
+# endif
+#endif
+
+#if @GNULIB_SETLOCALE@
+# if @REPLACE_SETLOCALE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef setlocale
+#   define setlocale rpl_setlocale
+#   define GNULIB_defined_setlocale 1
+#  endif
+_GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale));
+_GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale));
+# else
+_GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale));
+# endif
+_GL_CXXALIASWARN (setlocale);
+#elif defined GNULIB_POSIXCHECK
+# undef setlocale
+# if HAVE_RAW_DECL_SETLOCALE
+_GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - "
+                 "use gnulib module setlocale for portability");
+# endif
+#endif
+
+#if @GNULIB_DUPLOCALE@
+# if @REPLACE_DUPLOCALE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef duplocale
+#   define duplocale rpl_duplocale
+#  endif
+_GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale));
+# else
+#  if @HAVE_DUPLOCALE@
+_GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale));
+#  endif
+# endif
+# if @HAVE_DUPLOCALE@
+_GL_CXXALIASWARN (duplocale);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef duplocale
+# if HAVE_RAW_DECL_DUPLOCALE
+_GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - "
+                 "use gnulib module duplocale for portability");
+# endif
+#endif
+
+#endif /* _@GUARD_PREFIX@_LOCALE_H */
+#endif /* ! _GL_ALREADY_INCLUDING_LOCALE_H */
+#endif /* _@GUARD_PREFIX@_LOCALE_H */
diff --git a/contrib/diffutils/lib/localeconv.c b/contrib/diffutils/lib/localeconv.c
new file mode 100644 (file)
index 0000000..7c7c77c
--- /dev/null
@@ -0,0 +1,103 @@
+/* Query locale dependent information for formatting numbers.
+   Copyright (C) 2012-2013 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <locale.h>
+
+#if HAVE_STRUCT_LCONV_DECIMAL_POINT
+
+/* Override for platforms where 'struct lconv' lacks the int_p_*, int_n_*
+   members.  */
+
+struct lconv *
+localeconv (void)
+{
+  static struct lconv result;
+# undef lconv
+# undef localeconv
+  struct lconv *sys_result = localeconv ();
+
+  result.decimal_point = sys_result->decimal_point;
+  result.thousands_sep = sys_result->thousands_sep;
+  result.grouping = sys_result->grouping;
+  result.mon_decimal_point = sys_result->mon_decimal_point;
+  result.mon_thousands_sep = sys_result->mon_thousands_sep;
+  result.mon_grouping = sys_result->mon_grouping;
+  result.positive_sign = sys_result->positive_sign;
+  result.negative_sign = sys_result->negative_sign;
+  result.currency_symbol = sys_result->currency_symbol;
+  result.frac_digits = sys_result->frac_digits;
+  result.p_cs_precedes = sys_result->p_cs_precedes;
+  result.p_sign_posn = sys_result->p_sign_posn;
+  result.p_sep_by_space = sys_result->p_sep_by_space;
+  result.n_cs_precedes = sys_result->n_cs_precedes;
+  result.n_sign_posn = sys_result->n_sign_posn;
+  result.n_sep_by_space = sys_result->n_sep_by_space;
+  result.int_curr_symbol = sys_result->int_curr_symbol;
+  result.int_frac_digits = sys_result->int_frac_digits;
+  result.int_p_cs_precedes = sys_result->p_cs_precedes;
+  result.int_p_sign_posn = sys_result->p_sign_posn;
+  result.int_p_sep_by_space = sys_result->p_sep_by_space;
+  result.int_n_cs_precedes = sys_result->n_cs_precedes;
+  result.int_n_sign_posn = sys_result->n_sign_posn;
+  result.int_n_sep_by_space = sys_result->n_sep_by_space;
+
+  return &result;
+}
+
+#else
+
+/* Override for platforms where 'struct lconv' is a dummy.  */
+
+# include <limits.h>
+
+struct lconv *
+localeconv (void)
+{
+  static /*const*/ struct lconv result =
+    {
+      /* decimal_point */ ".",
+      /* thousands_sep */ "",
+      /* grouping */ "",
+      /* mon_decimal_point */ "",
+      /* mon_thousands_sep */ "",
+      /* mon_grouping */ "",
+      /* positive_sign */ "",
+      /* negative_sign */ "",
+      /* currency_symbol */ "",
+      /* frac_digits */ CHAR_MAX,
+      /* p_cs_precedes */ CHAR_MAX,
+      /* p_sign_posn */ CHAR_MAX,
+      /* p_sep_by_space */ CHAR_MAX,
+      /* n_cs_precedes */ CHAR_MAX,
+      /* n_sign_posn */ CHAR_MAX,
+      /* n_sep_by_space */ CHAR_MAX,
+      /* int_curr_symbol */ "",
+      /* int_frac_digits */ CHAR_MAX,
+      /* int_p_cs_precedes */ CHAR_MAX,
+      /* int_p_sign_posn */ CHAR_MAX,
+      /* int_p_sep_by_space */ CHAR_MAX,
+      /* int_n_cs_precedes */ CHAR_MAX,
+      /* int_n_sign_posn */ CHAR_MAX,
+      /* int_n_sep_by_space */ CHAR_MAX
+    };
+
+  return &result;
+}
+
+#endif
index 29fc6d2..1a613a8 100644 (file)
@@ -1,6 +1,6 @@
 /* Work around a bug of lstat on some systems
 
-   Copyright (C) 1997-2006, 2008-2011 Free Software Foundation, Inc.
+   Copyright (C) 1997-2006, 2008-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -35,24 +35,27 @@ typedef int dummy;
 # include <sys/stat.h>
 # undef __need_system_sys_stat_h
 
-static inline int
+static int
 orig_lstat (const char *filename, struct stat *buf)
 {
   return lstat (filename, buf);
 }
 
 /* Specification.  */
-# include <sys/stat.h>
+/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc
+   eliminates this include because of the preliminary #include <sys/stat.h>
+   above.  */
+# include "sys/stat.h"
 
 # include <string.h>
 # include <errno.h>
 
 /* lstat works differently on Linux and Solaris systems.  POSIX (see
-   `pathname resolution' in the glossary) requires that programs like
-   `ls' take into consideration the fact that FILE has a trailing slash
+   "pathname resolution" in the glossary) requires that programs like
+   'ls' take into consideration the fact that FILE has a trailing slash
    when FILE is a symbolic link.  On Linux and Solaris 10 systems, the
    lstat function already has the desired semantics (in treating
-   `lstat ("symlink/", sbuf)' just like `lstat ("symlink/.", sbuf)',
+   'lstat ("symlink/", sbuf)' just like 'lstat ("symlink/.", sbuf)',
    but on Solaris 9 and earlier it does not.
 
    If FILE has a trailing slash and specifies a symbolic link,
index 11482c5..3cd2f6d 100644 (file)
@@ -1,7 +1,5 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 /* Safe automatic memory allocation.
-   Copyright (C) 2003, 2006-2007, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2006-2007, 2009-2013 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2003.
 
    This program is free software; you can redistribute it and/or modify
@@ -15,8 +13,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 #define _GL_USE_STDLIB_ALLOC 1
 #include <config.h>
@@ -24,6 +21,8 @@
 /* Specification.  */
 #include "malloca.h"
 
+#include <stdint.h>
+
 #include "verify.h"
 
 /* The speed critical point in this file is freea() applied to an alloca()
@@ -87,7 +86,7 @@ mmalloca (size_t n)
           ((int *) p)[-1] = MAGIC_NUMBER;
 
           /* Enter p into the hash table.  */
-          slot = (unsigned long) p % HASH_TABLE_SIZE;
+          slot = (uintptr_t) p % HASH_TABLE_SIZE;
           ((struct header *) (p - HEADER_SIZE))->next = mmalloca_results[slot];
           mmalloca_results[slot] = p;
 
@@ -120,7 +119,7 @@ freea (void *p)
         {
           /* Looks like a mmalloca() result.  To see whether it really is one,
              perform a lookup in the hash table.  */
-          size_t slot = (unsigned long) p % HASH_TABLE_SIZE;
+          size_t slot = (uintptr_t) p % HASH_TABLE_SIZE;
           void **chain = &mmalloca_results[slot];
           for (; *chain != NULL;)
             {
index 933fa7e..906d47a 100644 (file)
@@ -1,7 +1,5 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
 /* Safe automatic memory allocation.
-   Copyright (C) 2003-2007, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2003-2007, 2009-2013 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2003.
 
    This program is free software; you can redistribute it and/or modify
@@ -15,8 +13,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _MALLOCA_H
 #define _MALLOCA_H
@@ -45,7 +42,7 @@ extern "C" {
    and a page size can be as small as 4096 bytes.  So we cannot safely
    allocate anything larger than 4096 bytes.  Also care for the possibility
    of a few compiler-allocated temporary stack slots.
-   This must be a macro, not an inline function.  */
+   This must be a macro, not a function.  */
 # define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL)
 #else
 # define safe_alloca(N) ((void) (N), NULL)
index c9b0dcd..7482c31 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001, 2006, 2009-2011 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2006, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -16,6 +16,8 @@
 
 #include <config.h>
 
+#define MBCHAR_INLINE _GL_EXTERN_INLINE
+
 #include <limits.h>
 
 #include "mbchar.h"
index 6dcb6cf..327c957 100644 (file)
@@ -1,5 +1,5 @@
 /* Multibyte character data type.
-   Copyright (C) 2001, 2005-2007, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2005-2007, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #include <wchar.h>
 #include <wctype.h>
 
+_GL_INLINE_HEADER_BEGIN
+#ifndef MBCHAR_INLINE
+# define MBCHAR_INLINE _GL_INLINE
+#endif
+
 #define MBCHAR_BUF_SIZE 24
 
 struct mbchar
@@ -235,7 +240,7 @@ typedef struct mbchar mbchar_t;
 /* Unprintable characters appear as a small box of width 1.  */
 #define MB_UNPRINTABLE_WIDTH 1
 
-static inline int
+MBCHAR_INLINE int
 mb_width_aux (wint_t wc)
 {
   int w = wcwidth (wc);
@@ -256,7 +261,7 @@ mb_width_aux (wint_t wc)
    (mbc)->wc = (mbc)->buf[0] = (sc))
 
 /* Copying a character.  */
-static inline void
+MBCHAR_INLINE void
 mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc)
 {
   if (old_mbc->ptr == &old_mbc->buf[0])
@@ -304,7 +309,7 @@ mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc)
 
 extern const unsigned int is_basic_table[];
 
-static inline bool
+MBCHAR_INLINE bool
 is_basic (char c)
 {
   return (is_basic_table [(unsigned char) c >> 5] >> ((unsigned char) c & 31))
@@ -313,7 +318,7 @@ is_basic (char c)
 
 #else
 
-static inline bool
+MBCHAR_INLINE bool
 is_basic (char c)
 {
   switch (c)
@@ -347,4 +352,6 @@ is_basic (char c)
 
 #endif
 
+_GL_INLINE_HEADER_END
+
 #endif /* _MBCHAR_H */
diff --git a/contrib/diffutils/lib/mbiter.c b/contrib/diffutils/lib/mbiter.c
new file mode 100644 (file)
index 0000000..22a1ff8
--- /dev/null
@@ -0,0 +1,3 @@
+#include <config.h>
+#define MBITER_INLINE _GL_EXTERN_INLINE
+#include "mbiter.h"
index 38cf6b1..24504c3 100644 (file)
@@ -1,5 +1,5 @@
 /* Iterating through multibyte strings: macros for multi-byte encodings.
-   Copyright (C) 2001, 2005, 2007, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2005, 2007, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -47,9 +47,9 @@
      initializes the iterator, starting at startptr and crossing length bytes.
 
    mbi_avail (iter)
-     returns true if there are more multibyte chracters available before
+     returns true if there are more multibyte characters available before
      the end of string is reached. In this case, mbi_cur (iter) is
-     initialized to the next multibyte chracter.
+     initialized to the next multibyte character.
 
    mbi_advance (iter)
      advances the iterator by one multibyte character.
 
 #include "mbchar.h"
 
+_GL_INLINE_HEADER_BEGIN
+#ifndef MBITER_INLINE
+# define MBITER_INLINE _GL_INLINE
+#endif
+
 struct mbiter_multi
 {
   const char *limit;    /* pointer to end of string */
@@ -112,7 +117,7 @@ struct mbiter_multi
         */
 };
 
-static inline void
+MBITER_INLINE void
 mbiter_multi_next (struct mbiter_multi *iter)
 {
   if (iter->next_done)
@@ -172,14 +177,14 @@ mbiter_multi_next (struct mbiter_multi *iter)
   iter->next_done = true;
 }
 
-static inline void
+MBITER_INLINE void
 mbiter_multi_reloc (struct mbiter_multi *iter, ptrdiff_t ptrdiff)
 {
   iter->cur.ptr += ptrdiff;
   iter->limit += ptrdiff;
 }
 
-static inline void
+MBITER_INLINE void
 mbiter_multi_copy (struct mbiter_multi *new_iter, const struct mbiter_multi *old_iter)
 {
   new_iter->limit = old_iter->limit;
@@ -212,4 +217,6 @@ typedef struct mbiter_multi mbi_iterator_t;
 /* Copying an iterator.  */
 #define mbi_copy mbiter_multi_copy
 
+_GL_INLINE_HEADER_END
+
 #endif /* _MBITER_H */
index dfff49c..97ef1da 100644 (file)
@@ -1,5 +1,5 @@
 /* Case-insensitive string comparison function.
-   Copyright (C) 1998-1999, 2005-2011 Free Software Foundation, Inc.
+   Copyright (C) 1998-1999, 2005-2013 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2005,
    based on earlier glibc code.
 
index efddd52..85e938b 100644 (file)
@@ -1,5 +1,5 @@
 /* Counting the multibyte characters in a string.
-   Copyright (C) 2007-2011 Free Software Foundation, Inc.
+   Copyright (C) 2007-2013 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2007.
 
    This program is free software: you can redistribute it and/or modify
index 611000e..f84e689 100644 (file)
@@ -1,5 +1,5 @@
 /* Searching in a string.
-   Copyright (C) 2005-2011 Free Software Foundation, Inc.
+   Copyright (C) 2005-2013 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2005.
 
    This program is free software: you can redistribute it and/or modify
diff --git a/contrib/diffutils/lib/mbuiter.c b/contrib/diffutils/lib/mbuiter.c
new file mode 100644 (file)
index 0000000..9167580
--- /dev/null
@@ -0,0 +1,3 @@
+#include <config.h>
+#define MBUITER_INLINE _GL_EXTERN_INLINE
+#include "mbuiter.h"
index 178f36e..c5f5fce 100644 (file)
@@ -1,5 +1,5 @@
 /* Iterating through multibyte strings: macros for multi-byte encodings.
-   Copyright (C) 2001, 2005, 2007, 2009-2011 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2005, 2007, 2009-2013 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -55,9 +55,9 @@
      initializes the iterator, starting at startptr.
 
    mbui_avail (iter)
-     returns true if there are more multibyte chracters available before
+     returns true if there are more multibyte characters available before
      the end of string is reached. In this case, mbui_cur (iter) is
-     initialized to the next multibyte chracter.
+     initialized to the next multibyte character.
 
    mbui_advance (iter)
      advances the iterator by one multibyte character.
 #include "mbchar.h"
 #include "strnlen1.h"
 
+_GL_INLINE_HEADER_BEGIN
+#ifndef MBUITER_INLINE
+# define MBUITER_INLINE _GL_INLINE
+#endif
+
 struct mbuiter_multi
 {
   bool in_shift;        /* true if next byte may not be interpreted as ASCII */
@@ -120,7 +125,7 @@ struct mbuiter_multi
         */
 };
 
-static inline void
+MBUITER_INLINE void
 mbuiter_multi_next (struct mbuiter_multi *iter)
 {
   if (iter->next_done)
@@ -181,13 +186,13 @@ mbuiter_multi_next (struct mbuiter_multi *iter)
   iter->next_done = true;
 }
 
-static inline void
+MBUITER_INLINE void
 mbuiter_multi_reloc (struct mbuiter_multi *iter, ptrdiff_t ptrdiff)
 {
   iter->cur.ptr += ptrdiff;
 }
 
-static inline void
+MBUITER_INLINE void
 mbuiter_multi_copy (struct mbuiter_multi *new_iter, const struct mbuiter_multi *old_iter)
 {
   if ((new_iter->in_shift = old_iter->in_shift))
@@ -219,4 +224,6 @@ typedef struct mbuiter_multi mbui_iterator_t;
 /* Copying an iterator.  */
 #define mbui_copy mbuiter_multi_copy
 
+_GL_INLINE_HEADER_END
+
 #endif /* _MBUITER_H */
index 9b4d1f1..e660a23 100644 (file)
@@ -1,23 +1,21 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Convert a `struct tm' to a time_t value.
-   Copyright (C) 1993-1999, 2002-2007, 2009-2011 Free Software Foundation, Inc.
+/* Convert a 'struct tm' to a time_t value.
+   Copyright (C) 1993-2013 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Paul Eggert <eggert@twinsun.com>.
 
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3, or (at your option)
-   any later version.
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public
+   License as published by the Free Software Foundation; either
+   version 3 of the License, or (at your option) any later version.
 
-   This program is distributed in the hope that it will be useful,
+   The GNU C Library 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 General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
 
-   You should have received a copy of the GNU General Public License along
-   with this program; if not, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+   You should have received a copy of the GNU General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
 
 /* Define this to have a standalone program to test this implementation of
    mktime.  */
 # include <config.h>
 #endif
 
-/* Some of the code in this file assumes that signed integer overflow
-   silently wraps around.  This assumption can't easily be programmed
-   around, nor can it be checked for portably at compile-time or
-   easily eliminated at run-time.
-
-   Define WRAPV to 1 if the assumption is valid.  Otherwise, define it
-   to 0; this forces the use of slower code that, while not guaranteed
-   by the C Standard, works on all production platforms that we know
-   about.  */
-#ifndef WRAPV
-# if (__GNUC__ == 4 && 4 <= __GNUC_MINOR__) || 4 < __GNUC__
-#  pragma GCC optimize ("wrapv")
-#  define WRAPV 1
-# else
-#  define WRAPV 0
-# endif
-#endif
-
 /* Assume that leap seconds are possible, unless told otherwise.
-   If the host has a `zic' command with a `-L leapsecondfilename' option,
+   If the host has a 'zic' command with a '-L leapsecondfilename' option,
    then it supports leap seconds; otherwise it probably doesn't.  */
 #ifndef LEAP_SECONDS_POSSIBLE
 # define LEAP_SECONDS_POSSIBLE 1
@@ -56,7 +36,7 @@
 
 #include <limits.h>
 
-#include <string.h>             /* For the real memcpy prototype.  */
+#include <string.h>            /* For the real memcpy prototype.  */
 
 #if DEBUG
 # include <stdio.h>
 # define mktime my_mktime
 #endif /* DEBUG */
 
+/* Some of the code in this file assumes that signed integer overflow
+   silently wraps around.  This assumption can't easily be programmed
+   around, nor can it be checked for portably at compile-time or
+   easily eliminated at run-time.
+
+   Define WRAPV to 1 if the assumption is valid and if
+     #pragma GCC optimize ("wrapv")
+   does not trigger GCC bug 51793
+   <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51793>.
+   Otherwise, define it to 0; this forces the use of slower code that,
+   while not guaranteed by the C Standard, works on all production
+   platforms that we know about.  */
+#ifndef WRAPV
+# if (((__GNUC__ == 4 && 4 <= __GNUC_MINOR__) || 4 < __GNUC__) \
+      && defined __GLIBC__)
+#  pragma GCC optimize ("wrapv")
+#  define WRAPV 1
+# else
+#  define WRAPV 0
+# endif
+#endif
+
 /* Verify a requirement at compile-time (unlike assert, which is runtime).  */
 #define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
 
@@ -114,12 +116,12 @@ verify (long_int_is_wide_enough, INT_MAX == INT_MAX * (long_int) 2 / 2);
    your host.  */
 #define TYPE_MINIMUM(t) \
   ((t) (! TYPE_SIGNED (t) \
-        ? (t) 0 \
-        : ~ TYPE_MAXIMUM (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)))
+       ? (t) -1 \
+       : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
 
 #ifndef TIME_T_MIN
 # define TIME_T_MIN TYPE_MINIMUM (time_t)
@@ -131,16 +133,16 @@ verify (long_int_is_wide_enough, INT_MAX == INT_MAX * (long_int) 2 / 2);
 
 verify (time_t_is_integer, TYPE_IS_INTEGER (time_t));
 verify (twos_complement_arithmetic,
-        (TYPE_TWOS_COMPLEMENT (int)
-         && TYPE_TWOS_COMPLEMENT (long_int)
-         && TYPE_TWOS_COMPLEMENT (time_t)));
+       (TYPE_TWOS_COMPLEMENT (int)
+        && TYPE_TWOS_COMPLEMENT (long_int)
+        && TYPE_TWOS_COMPLEMENT (time_t)));
 
 #define EPOCH_YEAR 1970
 #define TM_YEAR_BASE 1900
 verify (base_year_is_a_multiple_of_100, TM_YEAR_BASE % 100 == 0);
 
 /* Return 1 if YEAR + TM_YEAR_BASE is a leap year.  */
-static inline int
+static int
 leapyear (long_int year)
 {
   /* Don't add YEAR to TM_YEAR_BASE, as that might overflow.
@@ -148,7 +150,7 @@ leapyear (long_int year)
   return
     ((year & 3) == 0
      && (year % 100 != 0
-         || ((year / 100) & 3) == (- (TM_YEAR_BASE / 100) & 3)));
+        || ((year / 100) & 3) == (- (TM_YEAR_BASE / 100) & 3)));
 }
 
 /* How many days come before each month (0-12).  */
@@ -180,7 +182,7 @@ const unsigned short int __mon_yday[2][13] =
 static int
 isdst_differ (int a, int b)
 {
-  return (!a != !b) & (0 <= a) & (0 <= b);
+  return (!a != !b) && (0 <= a) && (0 <= b);
 }
 
 /* Return an integer value measuring (YEAR1-YDAY1 HOUR1:MIN1:SEC1) -
@@ -194,9 +196,9 @@ isdst_differ (int a, int b)
    The result may overflow.  It is the caller's responsibility to
    detect overflow.  */
 
-static inline time_t
+static time_t
 ydhms_diff (long_int year1, long_int yday1, int hour1, int min1, int sec1,
-            int year0, int yday0, int hour0, int min0, int sec0)
+           int year0, int yday0, int hour0, int min0, int sec0)
 {
   verify (C99_integer_division, -1 / 2 == 0);
 
@@ -277,15 +279,15 @@ time_t_int_add_ok (time_t a, int b)
    yield a value equal to *T.  */
 static time_t
 guess_time_tm (long_int year, long_int yday, int hour, int min, int sec,
-               const time_t *t, const struct tm *tp)
+              const time_t *t, const struct tm *tp)
 {
   if (tp)
     {
       time_t d = ydhms_diff (year, yday, hour, min, sec,
-                             tp->tm_year, tp->tm_yday,
-                             tp->tm_hour, tp->tm_min, tp->tm_sec);
+                            tp->tm_year, tp->tm_yday,
+                            tp->tm_hour, tp->tm_min, tp->tm_sec);
       if (time_t_add_ok (*t, d))
-        return *t + d;
+       return *t + d;
     }
 
   /* Overflow occurred one way or another.  Return the nearest result
@@ -294,8 +296,8 @@ guess_time_tm (long_int year, long_int yday, int hour, int min, int sec,
      match; and don't oscillate between two values, as that would
      confuse the spring-forward gap detector.  */
   return (*t < TIME_T_MIDPOINT
-          ? (*t <= TIME_T_MIN + 1 ? *t + 1 : TIME_T_MIN)
-          : (TIME_T_MAX - 1 <= *t ? *t - 1 : TIME_T_MAX));
+         ? (*t <= TIME_T_MIN + 1 ? *t + 1 : TIME_T_MIN)
+         : (TIME_T_MAX - 1 <= *t ? *t - 1 : TIME_T_MAX));
 }
 
 /* Use CONVERT to convert *T to a broken down time in *TP.
@@ -303,7 +305,7 @@ guess_time_tm (long_int year, long_int yday, int hour, int min, int sec,
    it is the nearest in-range value and then convert that.  */
 static struct tm *
 ranged_convert (struct tm *(*convert) (const time_t *, struct tm *),
-                time_t *t, struct tm *tp)
+               time_t *t, struct tm *tp)
 {
   struct tm *r = convert (t, tp);
 
@@ -313,25 +315,25 @@ ranged_convert (struct tm *(*convert) (const time_t *, struct tm *),
       time_t ok = 0;
 
       /* BAD is a known unconvertible time_t, and OK is a known good one.
-         Use binary search to narrow the range between BAD and OK until
-         they differ by 1.  */
+        Use binary search to narrow the range between BAD and OK until
+        they differ by 1.  */
       while (bad != ok + (bad < 0 ? -1 : 1))
-        {
-          time_t mid = *t = time_t_avg (ok, bad);
-          r = convert (t, tp);
-          if (r)
-            ok = mid;
-          else
-            bad = mid;
-        }
+       {
+         time_t mid = *t = time_t_avg (ok, bad);
+         r = convert (t, tp);
+         if (r)
+           ok = mid;
+         else
+           bad = mid;
+       }
 
       if (!r && ok)
-        {
-          /* The last conversion attempt failed;
-             revert to the most recent successful attempt.  */
-          *t = ok;
-          r = convert (t, tp);
-        }
+       {
+         /* The last conversion attempt failed;
+            revert to the most recent successful attempt.  */
+         *t = ok;
+         r = convert (t, tp);
+       }
     }
 
   return r;
@@ -346,8 +348,8 @@ ranged_convert (struct tm *(*convert) (const time_t *, struct tm *),
    This function is external because it is used also by timegm.c.  */
 time_t
 __mktime_internal (struct tm *tp,
-                   struct tm *(*convert) (const time_t *, struct tm *),
-                   time_t *offset)
+                  struct tm *(*convert) (const time_t *, struct tm *),
+                  time_t *offset)
 {
   time_t t, gt, t0, t1, t2;
   struct tm tm;
@@ -386,8 +388,8 @@ __mktime_internal (struct tm *tp,
   /* Calculate day of year from year, month, and day of month.
      The result need not be in range.  */
   int mon_yday = ((__mon_yday[leapyear (year)]
-                   [mon_remainder + 12 * negative_mon_remainder])
-                  - 1);
+                  [mon_remainder + 12 * negative_mon_remainder])
+                 - 1);
   long_int lmday = mday;
   long_int yday = mon_yday + lmday;
 
@@ -398,33 +400,33 @@ __mktime_internal (struct tm *tp,
   if (LEAP_SECONDS_POSSIBLE)
     {
       /* Handle out-of-range seconds specially,
-         since ydhms_tm_diff assumes every minute has 60 seconds.  */
+        since ydhms_tm_diff assumes every minute has 60 seconds.  */
       if (sec < 0)
-        sec = 0;
+       sec = 0;
       if (59 < sec)
-        sec = 59;
+       sec = 59;
     }
 
   /* Invert CONVERT by probing.  First assume the same offset as last
      time.  */
 
   t0 = ydhms_diff (year, yday, hour, min, sec,
-                   EPOCH_YEAR - TM_YEAR_BASE, 0, 0, 0, - guessed_offset);
+                  EPOCH_YEAR - TM_YEAR_BASE, 0, 0, 0, - guessed_offset);
 
   if (TIME_T_MAX / INT_MAX / 366 / 24 / 60 / 60 < 3)
     {
       /* time_t isn't large enough to rule out overflows, so check
-         for major overflows.  A gross check suffices, since if t0
-         has overflowed, it is off by a multiple of TIME_T_MAX -
-         TIME_T_MIN + 1.  So ignore any component of the difference
-         that is bounded by a small value.  */
+        for major overflows.  A gross check suffices, since if t0
+        has overflowed, it is off by a multiple of TIME_T_MAX -
+        TIME_T_MIN + 1.  So ignore any component of the difference
+        that is bounded by a small value.  */
 
       /* Approximate log base 2 of the number of time units per
-         biennium.  A biennium is 2 years; use this unit instead of
-         years to avoid integer overflow.  For example, 2 average
-         Gregorian years are 2 * 365.2425 * 24 * 60 * 60 seconds,
-         which is 63113904 seconds, and rint (log2 (63113904)) is
-         26.  */
+        biennium.  A biennium is 2 years; use this unit instead of
+        years to avoid integer overflow.  For example, 2 average
+        Gregorian years are 2 * 365.2425 * 24 * 60 * 60 seconds,
+        which is 63113904 seconds, and rint (log2 (63113904)) is
+        26.  */
       int ALOG2_SECONDS_PER_BIENNIUM = 26;
       int ALOG2_MINUTES_PER_BIENNIUM = 20;
       int ALOG2_HOURS_PER_BIENNIUM = 14;
@@ -432,64 +434,64 @@ __mktime_internal (struct tm *tp,
       int LOG2_YEARS_PER_BIENNIUM = 1;
 
       int approx_requested_biennia =
-        (SHR (year_requested, LOG2_YEARS_PER_BIENNIUM)
-         - SHR (EPOCH_YEAR - TM_YEAR_BASE, LOG2_YEARS_PER_BIENNIUM)
-         + SHR (mday, ALOG2_DAYS_PER_BIENNIUM)
-         + SHR (hour, ALOG2_HOURS_PER_BIENNIUM)
-         + SHR (min, ALOG2_MINUTES_PER_BIENNIUM)
-         + (LEAP_SECONDS_POSSIBLE
-            ? 0
-            : SHR (sec, ALOG2_SECONDS_PER_BIENNIUM)));
+       (SHR (year_requested, LOG2_YEARS_PER_BIENNIUM)
+        - SHR (EPOCH_YEAR - TM_YEAR_BASE, LOG2_YEARS_PER_BIENNIUM)
+        + SHR (mday, ALOG2_DAYS_PER_BIENNIUM)
+        + SHR (hour, ALOG2_HOURS_PER_BIENNIUM)
+        + SHR (min, ALOG2_MINUTES_PER_BIENNIUM)
+        + (LEAP_SECONDS_POSSIBLE
+           ? 0
+           : SHR (sec, ALOG2_SECONDS_PER_BIENNIUM)));
 
       int approx_biennia = SHR (t0, ALOG2_SECONDS_PER_BIENNIUM);
       int diff = approx_biennia - approx_requested_biennia;
-      int abs_diff = diff < 0 ? -1 - diff : diff;
+      int approx_abs_diff = diff < 0 ? -1 - diff : diff;
 
       /* IRIX 4.0.5 cc miscalculates TIME_T_MIN / 3: it erroneously
-         gives a positive value of 715827882.  Setting a variable
-         first then doing math on it seems to work.
-         (ghazi@caip.rutgers.edu) */
+        gives a positive value of 715827882.  Setting a variable
+        first then doing math on it seems to work.
+        (ghazi@caip.rutgers.edu) */
       time_t time_t_max = TIME_T_MAX;
       time_t time_t_min = TIME_T_MIN;
       time_t overflow_threshold =
-        (time_t_max / 3 - time_t_min / 3) >> ALOG2_SECONDS_PER_BIENNIUM;
-
-      if (overflow_threshold < abs_diff)
-        {
-          /* Overflow occurred.  Try repairing it; this might work if
-             the time zone offset is enough to undo the overflow.  */
-          time_t repaired_t0 = -1 - t0;
-          approx_biennia = SHR (repaired_t0, ALOG2_SECONDS_PER_BIENNIUM);
-          diff = approx_biennia - approx_requested_biennia;
-          abs_diff = diff < 0 ? -1 - diff : diff;
-          if (overflow_threshold < abs_diff)
-            return -1;
-          guessed_offset += repaired_t0 - t0;
-          t0 = repaired_t0;
-        }
+       (time_t_max / 3 - time_t_min / 3) >> ALOG2_SECONDS_PER_BIENNIUM;
+
+      if (overflow_threshold < approx_abs_diff)
+       {
+         /* Overflow occurred.  Try repairing it; this might work if
+            the time zone offset is enough to undo the overflow.  */
+         time_t repaired_t0 = -1 - t0;
+         approx_biennia = SHR (repaired_t0, ALOG2_SECONDS_PER_BIENNIUM);
+         diff = approx_biennia - approx_requested_biennia;
+         approx_abs_diff = diff < 0 ? -1 - diff : diff;
+         if (overflow_threshold < approx_abs_diff)
+           return -1;
+         guessed_offset += repaired_t0 - t0;
+         t0 = repaired_t0;
+       }
     }
 
   /* Repeatedly use the error to improve the guess.  */
 
   for (t = t1 = t2 = t0, dst2 = 0;
        (gt = guess_time_tm (year, yday, hour, min, sec, &t,
-                            ranged_convert (convert, &t, &tm)),
-        t != gt);
+                           ranged_convert (convert, &t, &tm)),
+       t != gt);
        t1 = t2, t2 = t, t = gt, dst2 = tm.tm_isdst != 0)
     if (t == t1 && t != t2
-        && (tm.tm_isdst < 0
-            || (isdst < 0
-                ? dst2 <= (tm.tm_isdst != 0)
-                : (isdst != 0) != (tm.tm_isdst != 0))))
+       && (tm.tm_isdst < 0
+           || (isdst < 0
+               ? dst2 <= (tm.tm_isdst != 0)
+               : (isdst != 0) != (tm.tm_isdst != 0))))
       /* We can't possibly find a match, as we are oscillating
-         between two values.  The requested time probably falls
-         within a spring-forward gap of size GT - T.  Follow the common
-         practice in this case, which is to return a time that is GT - T
-         away from the requested time, preferring a time whose
-         tm_isdst differs from the requested value.  (If no tm_isdst
-         was requested and only one of the two values has a nonzero
-         tm_isdst, prefer that value.)  In practice, this is more
-         useful than returning -1.  */
+        between two values.  The requested time probably falls
+        within a spring-forward gap of size GT - T.  Follow the common
+        practice in this case, which is to return a time that is GT - T
+        away from the requested time, preferring a time whose
+        tm_isdst differs from the requested value.  (If no tm_isdst
+        was requested and only one of the two values has a nonzero
+        tm_isdst, prefer that value.)  In practice, this is more
+        useful than returning -1.  */
       goto offset_found;
     else if (--remaining_probes == 0)
       return -1;
@@ -499,50 +501,50 @@ __mktime_internal (struct tm *tp,
   if (isdst_differ (isdst, tm.tm_isdst))
     {
       /* tm.tm_isdst has the wrong value.  Look for a neighboring
-         time with the right value, and use its UTC offset.
+        time with the right value, and use its UTC offset.
 
-         Heuristic: probe the adjacent timestamps in both directions,
-         looking for the desired isdst.  This should work for all real
-         time zone histories in the tz database.  */
+        Heuristic: probe the adjacent timestamps in both directions,
+        looking for the desired isdst.  This should work for all real
+        time zone histories in the tz database.  */
 
       /* Distance between probes when looking for a DST boundary.  In
-         tzdata2003a, the shortest period of DST is 601200 seconds
-         (e.g., America/Recife starting 2000-10-08 01:00), and the
-         shortest period of non-DST surrounded by DST is 694800
-         seconds (Africa/Tunis starting 1943-04-17 01:00).  Use the
-         minimum of these two values, so we don't miss these short
-         periods when probing.  */
+        tzdata2003a, the shortest period of DST is 601200 seconds
+        (e.g., America/Recife starting 2000-10-08 01:00), and the
+        shortest period of non-DST surrounded by DST is 694800
+        seconds (Africa/Tunis starting 1943-04-17 01:00).  Use the
+        minimum of these two values, so we don't miss these short
+        periods when probing.  */
       int stride = 601200;
 
       /* The longest period of DST in tzdata2003a is 536454000 seconds
-         (e.g., America/Jujuy starting 1946-10-01 01:00).  The longest
-         period of non-DST is much longer, but it makes no real sense
-         to search for more than a year of non-DST, so use the DST
-         max.  */
+        (e.g., America/Jujuy starting 1946-10-01 01:00).  The longest
+        period of non-DST is much longer, but it makes no real sense
+        to search for more than a year of non-DST, so use the DST
+        max.  */
       int duration_max = 536454000;
 
       /* Search in both directions, so the maximum distance is half
-         the duration; add the stride to avoid off-by-1 problems.  */
+        the duration; add the stride to avoid off-by-1 problems.  */
       int delta_bound = duration_max / 2 + stride;
 
       int delta, direction;
 
       for (delta = stride; delta < delta_bound; delta += stride)
-        for (direction = -1; direction <= 1; direction += 2)
-          if (time_t_int_add_ok (t, delta * direction))
-            {
-              time_t ot = t + delta * direction;
-              struct tm otm;
-              ranged_convert (convert, &ot, &otm);
-              if (! isdst_differ (isdst, otm.tm_isdst))
-                {
-                  /* We found the desired tm_isdst.
-                     Extrapolate back to the desired time.  */
-                  t = guess_time_tm (year, yday, hour, min, sec, &ot, &otm);
-                  ranged_convert (convert, &t, &tm);
-                  goto offset_found;
-                }
-            }
+       for (direction = -1; direction <= 1; direction += 2)
+         if (time_t_int_add_ok (t, delta * direction))
+           {
+             time_t ot = t + delta * direction;
+             struct tm otm;
+             ranged_convert (convert, &ot, &otm);
+             if (! isdst_differ (isdst, otm.tm_isdst))
+               {
+                 /* We found the desired tm_isdst.
+                    Extrapolate back to the desired time.  */
+                 t = guess_time_tm (year, yday, hour, min, sec, &ot, &otm);
+                 ranged_convert (convert, &t, &tm);
+                 goto offset_found;
+               }
+           }
     }
 
  offset_found:
@@ -551,16 +553,16 @@ __mktime_internal (struct tm *tp,
   if (LEAP_SECONDS_POSSIBLE && sec_requested != tm.tm_sec)
     {
       /* Adjust time to reflect the tm_sec requested, not the normalized value.
-         Also, repair any damage from a false match due to a leap second.  */
+        Also, repair any damage from a false match due to a leap second.  */
       int sec_adjustment = (sec == 0 && tm.tm_sec == 60) - sec;
       if (! time_t_int_add_ok (t, sec_requested))
-        return -1;
+       return -1;
       t1 = t + sec_requested;
       if (! time_t_int_add_ok (t1, sec_adjustment))
-        return -1;
+       return -1;
       t2 = t1 + sec_adjustment;
       if (! convert (&t2, &tm))
-        return -1;
+       return -1;
       t = t2;
     }
 
@@ -581,7 +583,7 @@ mktime (struct tm *tp)
 {
 #ifdef _LIBC
   /* POSIX.1 8.1.1 requires that whenever mktime() is called, the
-     time zone names contained in the external variable `tzname' shall
+     time zone names contained in the external variable 'tzname' shall
      be set as if the tzset() function had been called.  */
   __tzset ();
 #endif
@@ -604,13 +606,13 @@ static int
 not_equal_tm (const struct tm *a, const struct tm *b)
 {
   return ((a->tm_sec ^ b->tm_sec)
-          | (a->tm_min ^ b->tm_min)
-          | (a->tm_hour ^ b->tm_hour)
-          | (a->tm_mday ^ b->tm_mday)
-          | (a->tm_mon ^ b->tm_mon)
-          | (a->tm_year ^ b->tm_year)
-          | (a->tm_yday ^ b->tm_yday)
-          | isdst_differ (a->tm_isdst, b->tm_isdst));
+         | (a->tm_min ^ b->tm_min)
+         | (a->tm_hour ^ b->tm_hour)
+         | (a->tm_mday ^ b->tm_mday)
+         | (a->tm_mon ^ b->tm_mon)
+         | (a->tm_year ^ b->tm_year)
+         | (a->tm_yday ^ b->tm_yday)
+         | isdst_differ (a->tm_isdst, b->tm_isdst));
 }
 
 static void
@@ -618,9 +620,9 @@ print_tm (const struct tm *tp)
 {
   if (tp)
     printf ("%04d-%02d-%02d %02d:%02d:%02d yday %03d wday %d isdst %d",
-            tp->tm_year + TM_YEAR_BASE, tp->tm_mon + 1, tp->tm_mday,
-            tp->tm_hour, tp->tm_min, tp->tm_sec,
-            tp->tm_yday, tp->tm_wday, tp->tm_isdst);
+           tp->tm_year + TM_YEAR_BASE, tp->tm_mon + 1, tp->tm_mday,
+           tp->tm_hour, tp->tm_min, tp->tm_sec,
+           tp->tm_yday, tp->tm_wday, tp->tm_isdst);
   else
     printf ("0");
 }
@@ -652,11 +654,11 @@ main (int argc, char **argv)
 
   if ((argc == 3 || argc == 4)
       && (sscanf (argv[1], "%d-%d-%d%c",
-                  &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &trailer)
-          == 3)
+                 &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &trailer)
+         == 3)
       && (sscanf (argv[2], "%d:%d:%d%c",
-                  &tm.tm_hour, &tm.tm_min, &tm.tm_sec, &trailer)
-          == 3))
+                 &tm.tm_hour, &tm.tm_min, &tm.tm_sec, &trailer)
+         == 3))
     {
       tm.tm_year -= TM_YEAR_BASE;
       tm.tm_mon--;
@@ -665,10 +667,10 @@ main (int argc, char **argv)
       tl = mktime (&tmk);
       lt = localtime (&tl);
       if (lt)
-        {
-          tml = *lt;
-          lt = &tml;
-        }
+       {
+         tml = *lt;
+         lt = &tml;
+       }
       printf ("mktime returns %ld == ", (long int) tl);
       print_tm (&tmk);
       printf ("\n");
@@ -681,51 +683,51 @@ main (int argc, char **argv)
       time_t to = atol (argv[3]);
 
       if (argc == 4)
-        for (tl = from; by < 0 ? to <= tl : tl <= to; tl = tl1)
-          {
-            lt = localtime (&tl);
-            if (lt)
-              {
-                tmk = tml = *lt;
-                tk = mktime (&tmk);
-                status |= check_result (tk, tmk, tl, &tml);
-              }
-            else
-              {
-                printf ("localtime (%ld) yields 0\n", (long int) tl);
-                status = 1;
-              }
-            tl1 = tl + by;
-            if ((tl1 < tl) != (by < 0))
-              break;
-          }
+       for (tl = from; by < 0 ? to <= tl : tl <= to; tl = tl1)
+         {
+           lt = localtime (&tl);
+           if (lt)
+             {
+               tmk = tml = *lt;
+               tk = mktime (&tmk);
+               status |= check_result (tk, tmk, tl, &tml);
+             }
+           else
+             {
+               printf ("localtime (%ld) yields 0\n", (long int) tl);
+               status = 1;
+             }
+           tl1 = tl + by;
+           if ((tl1 < tl) != (by < 0))
+             break;
+         }
       else
-        for (tl = from; by < 0 ? to <= tl : tl <= to; tl = tl1)
-          {
-            /* Null benchmark.  */
-            lt = localtime (&tl);
-            if (lt)
-              {
-                tmk = tml = *lt;
-                tk = tl;
-                status |= check_result (tk, tmk, tl, &tml);
-              }
-            else
-              {
-                printf ("localtime (%ld) yields 0\n", (long int) tl);
-                status = 1;
-              }
-            tl1 = tl + by;
-            if ((tl1 < tl) != (by < 0))
-              break;
-          }
+       for (tl = from; by < 0 ? to <= tl : tl <= to; tl = tl1)
+         {
+           /* Null benchmark.  */
+           lt = localtime (&tl);
+           if (lt)
+             {
+               tmk = tml = *lt;
+               tk = tl;
+               status |= check_result (tk, tmk, tl, &tml);
+             }
+           else
+             {
+               printf ("localtime (%ld) yields 0\n", (long int) tl);
+               status = 1;
+             }
+           tl1 = tl + by;
+           if ((tl1 < tl) != (by < 0))
+             break;
+         }
     }
   else
     printf ("Usage:\
 \t%s YYYY-MM-DD HH:MM:SS [ISDST] # Test given time.\n\
 \t%s FROM BY TO # Test values FROM, FROM+BY, ..., TO.\n\
 \t%s FROM BY TO - # Do not test those values (for benchmark).\n",
-            argv[0], argv[0], argv[0]);
+           argv[0], argv[0], argv[0]);
 
   return status;
 }
diff --git a/contrib/diffutils/lib/msvc-inval.c b/contrib/diffutils/lib/msvc-inval.c
new file mode 100644 (file)
index 0000000..72a6b6e
--- /dev/null
@@ -0,0 +1,129 @@
+/* Invalid parameter handler for MSVC runtime libraries.
+   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   This program is distributed&